From fd80b043e2973d9f5c1f48ef379bae4aaf5a5ea0 Mon Sep 17 00:00:00 2001 From: taobun Date: Tue, 17 Sep 2024 17:57:01 +0700 Subject: [PATCH] able to compile and fix decoder emitter test --- app/modules.go | 2 + app/test_helpers.go | 1 + cmd/faucet/handler.go | 221 ++++++++++----------- cmd/faucet/keys.go | 358 +++++++++++++++++----------------- cmd/faucet/main.go | 146 +++++++------- cmd/faucet/run.go | 172 ++++++++-------- go.mod | 2 +- hooks/emitter/authz.go | 7 +- hooks/emitter/channel.go | 12 +- hooks/emitter/decoder.go | 2 +- hooks/emitter/decoder_test.go | 163 +++++++++++----- hooks/emitter/distribution.go | 11 +- hooks/emitter/emitter.go | 53 ++--- hooks/emitter/gov.go | 27 +-- hooks/emitter/oracle.go | 10 +- hooks/emitter/staking.go | 22 ++- hooks/emitter/utils.go | 20 ++ x/oracle/keeper/grpc_query.go | 1 + x/oracle/keeper/owasm.go | 5 - x/oracle/module.go | 1 + 20 files changed, 673 insertions(+), 563 deletions(-) create mode 100644 hooks/emitter/utils.go diff --git a/app/modules.go b/app/modules.go index 345c06aae..64d420f38 100644 --- a/app/modules.go +++ b/app/modules.go @@ -142,6 +142,7 @@ func appModules( app.BankKeeper, app.StakingKeeper, app.GetSubspace(oracletypes.ModuleName), + app.hooks, ), app.TransferModule, app.ICAModule, @@ -234,6 +235,7 @@ func simulationModules( app.BankKeeper, app.StakingKeeper, app.GetSubspace(oracletypes.ModuleName), + app.hooks, ), ibc.NewAppModule(app.IBCKeeper), app.TransferModule, diff --git a/app/test_helpers.go b/app/test_helpers.go index 030708679..f47f4a007 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -14,6 +14,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" tmtypes "github.com/cometbft/cometbft/types" + cosmosdb "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" diff --git a/cmd/faucet/handler.go b/cmd/faucet/handler.go index 6a4722491..7587b45b3 100644 --- a/cmd/faucet/handler.go +++ b/cmd/faucet/handler.go @@ -1,112 +1,113 @@ package main -import ( - "fmt" - "net/http" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" - sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/gin-gonic/gin" - "github.com/gin-gonic/gin/binding" - - band "github.com/bandprotocol/chain/v3/app" -) - -type Request struct { - Address string `json:"address" binding:"required"` -} - -type Response struct { - TxHash string `json:"txHash"` -} - -func handleRequest(gc *gin.Context, c *Context) { - key := <-c.keys - defer func() { - c.keys <- key - }() - - var req Request - if err := gc.ShouldBindBodyWith(&req, binding.JSON); err != nil { - gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - to, err := sdk.AccAddressFromBech32(req.Address) - if err != nil { - gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - - address, err := key.GetAddress() - if err != nil { - gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - - msg := banktypes.NewMsgSend(address, to, c.amount) - - clientCtx := client.Context{ - Client: c.client, - Codec: cdc, - TxConfig: band.MakeEncodingConfig().TxConfig, - BroadcastMode: "async", - InterfaceRegistry: band.MakeEncodingConfig().InterfaceRegistry, - } - accountRetriever := authtypes.AccountRetriever{} - acc, err := accountRetriever.GetAccount(clientCtx, address) - if err != nil { - gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - - txf := tx.Factory{}. - WithAccountNumber(acc.GetAccountNumber()). - WithSequence(acc.GetSequence()). - WithTxConfig(band.MakeEncodingConfig().TxConfig). - WithGas(200000).WithGasAdjustment(1). - WithChainID(cfg.ChainID). - WithMemo(""). - WithGasPrices(c.gasPrices.String()). - WithKeybase(keybase). - WithAccountRetriever(clientCtx.AccountRetriever) - - txb, err := txf.BuildUnsignedTx(msg) - if err != nil { - gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - - err = tx.Sign(txf, key.Name, txb, true) - if err != nil { - gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - - txBytes, err := clientCtx.TxConfig.TxEncoder()(txb.GetTx()) - if err != nil { - gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - - // broadcast to a Tendermint node - res, err := clientCtx.BroadcastTxSync(txBytes) - if err != nil { - gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - - if res.Code != 0 { - gc.JSON(http.StatusInternalServerError, gin.H{ - "error": fmt.Sprintf(":exploding_head: Tx returned nonzero code %d with log %s, tx hash: %s", - res.Code, res.RawLog, res.TxHash, - ), - }) - return - } - gc.JSON(200, Response{ - TxHash: res.TxHash, - }) -} +// import ( +// "context" +// "fmt" +// "net/http" + +// "github.com/cosmos/cosmos-sdk/client" +// "github.com/cosmos/cosmos-sdk/client/tx" +// sdk "github.com/cosmos/cosmos-sdk/types" +// authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +// banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +// "github.com/gin-gonic/gin" +// "github.com/gin-gonic/gin/binding" + +// band "github.com/bandprotocol/chain/v3/app" +// ) + +// type Request struct { +// Address string `json:"address" binding:"required"` +// } + +// type Response struct { +// TxHash string `json:"txHash"` +// } + +// func handleRequest(gc *gin.Context, c *Context) { +// key := <-c.keys +// defer func() { +// c.keys <- key +// }() + +// var req Request +// if err := gc.ShouldBindBodyWith(&req, binding.JSON); err != nil { +// gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +// return +// } +// to, err := sdk.AccAddressFromBech32(req.Address) +// if err != nil { +// gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +// return +// } + +// address, err := key.GetAddress() +// if err != nil { +// gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +// return +// } + +// msg := banktypes.NewMsgSend(address, to, c.amount) + +// clientCtx := client.Context{ +// Client: c.client, +// Codec: cdc, +// TxConfig: band.MakeEncodingConfig().TxConfig, +// BroadcastMode: "async", +// InterfaceRegistry: band.MakeEncodingConfig().InterfaceRegistry, +// } +// accountRetriever := authtypes.AccountRetriever{} +// acc, err := accountRetriever.GetAccount(clientCtx, address) +// if err != nil { +// gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +// return +// } + +// txf := tx.Factory{}. +// WithAccountNumber(acc.GetAccountNumber()). +// WithSequence(acc.GetSequence()). +// WithTxConfig(band.MakeEncodingConfig().TxConfig). +// WithGas(200000).WithGasAdjustment(1). +// WithChainID(cfg.ChainID). +// WithMemo(""). +// WithGasPrices(c.gasPrices.String()). +// WithKeybase(keybase). +// WithAccountRetriever(clientCtx.AccountRetriever) + +// txb, err := txf.BuildUnsignedTx(msg) +// if err != nil { +// gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +// return +// } + +// err = tx.Sign(context.Background(), txf, key.Name, txb, true) +// if err != nil { +// gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +// return +// } + +// txBytes, err := clientCtx.TxConfig.TxEncoder()(txb.GetTx()) +// if err != nil { +// gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +// return +// } + +// // broadcast to a Tendermint node +// res, err := clientCtx.BroadcastTxSync(txBytes) +// if err != nil { +// gc.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +// return +// } + +// if res.Code != 0 { +// gc.JSON(http.StatusInternalServerError, gin.H{ +// "error": fmt.Sprintf(":exploding_head: Tx returned nonzero code %d with log %s, tx hash: %s", +// res.Code, res.RawLog, res.TxHash, +// ), +// }) +// return +// } +// gc.JSON(200, Response{ +// TxHash: res.TxHash, +// }) +// } diff --git a/cmd/faucet/keys.go b/cmd/faucet/keys.go index f484583b5..da1c47214 100644 --- a/cmd/faucet/keys.go +++ b/cmd/faucet/keys.go @@ -1,181 +1,181 @@ package main -import ( - "bufio" - "fmt" - - "github.com/cosmos/cosmos-sdk/client/input" - "github.com/cosmos/cosmos-sdk/crypto/hd" - "github.com/cosmos/go-bip39" - "github.com/spf13/cobra" - - band "github.com/bandprotocol/chain/v3/app" -) - -const ( - flagAccount = "account" - flagIndex = "index" - flagCoinType = "coin-type" - flagRecover = "recover" -) - -func keysCmd(c *Context) *cobra.Command { - cmd := &cobra.Command{ - Use: "keys", - Aliases: []string{"k"}, - Short: "Manage key held by the oracle process", - } - cmd.AddCommand(keysAddCmd(c)) - cmd.AddCommand(keysDeleteCmd(c)) - cmd.AddCommand(keysListCmd(c)) - cmd.AddCommand(keysShowCmd(c)) - return cmd -} - -func keysAddCmd(c *Context) *cobra.Command { - cmd := &cobra.Command{ - Use: "add [name]", - Aliases: []string{"a"}, - Short: "Add a new key to the keychain", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - var mnemonic string - recover, err := cmd.Flags().GetBool(flagRecover) - if err != nil { - return err - } - if recover { - inBuf := bufio.NewReader(cmd.InOrStdin()) - var err error - mnemonic, err = input.GetString("Enter your bip39 mnemonic", inBuf) - if err != nil { - return err - } - } else { - seed, err := bip39.NewEntropy(256) - if err != nil { - return err - } - mnemonic, err = bip39.NewMnemonic(seed) - if err != nil { - return err - } - fmt.Printf("Mnemonic: %s\n", mnemonic) - } - - if err != nil { - return err - } - account, err := cmd.Flags().GetUint32(flagAccount) - if err != nil { - return err - } - index, err := cmd.Flags().GetUint32(flagIndex) - if err != nil { - return err - } - hdPath := hd.CreateHDPath(band.Bip44CoinType, account, index) - info, err := keybase.NewAccount(args[0], mnemonic, "", hdPath.String(), hd.Secp256k1) - if err != nil { - return err - } - - address, err := info.GetAddress() - if err != nil { - return err - } - - fmt.Printf("Address: %s\n", address.String()) - return nil - }, - } - cmd.Flags().Bool(flagRecover, false, "Provide seed phrase to recover existing key instead of creating") - cmd.Flags().Uint32(flagAccount, 0, "Account number for HD derivation") - cmd.Flags().Uint32(flagIndex, 0, "Address index number for HD derivation") - return cmd -} - -func keysDeleteCmd(c *Context) *cobra.Command { - cmd := &cobra.Command{ - Use: "delete [name]", - Aliases: []string{"d"}, - Short: "Delete a key from the keychain", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - name := args[0] - _, err := keybase.Key(name) - if err != nil { - return err - } - - inBuf := bufio.NewReader(cmd.InOrStdin()) - confirmInput, err := input.GetString("Key will be deleted. Continue?[y/N]", inBuf) - if err != nil { - return err - } - - if confirmInput != "y" { - fmt.Println("Cancel") - return nil - } - if err := keybase.Delete(name); err != nil { - return err - } - - fmt.Printf("Deleted key: %s\n", name) - return nil - }, - } - return cmd -} - -func keysListCmd(c *Context) *cobra.Command { - cmd := &cobra.Command{ - Use: "list", - Aliases: []string{"l"}, - Short: "List all the keys in the keychain", - Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { - keys, err := keybase.List() - if err != nil { - return err - } - for _, key := range keys { - address, err := key.GetAddress() - if err != nil { - return err - } - - fmt.Printf("%s => %s\n", key.Name, address.String()) - } - return nil - }, - } - return cmd -} - -func keysShowCmd(c *Context) *cobra.Command { - cmd := &cobra.Command{ - Use: "show [name]", - Aliases: []string{"s"}, - Short: "Show address from name in the keychain", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - name := args[0] - - key, err := keybase.Key(name) - if err != nil { - return err - } - - address, err := key.GetAddress() - if err != nil { - return err - } - - fmt.Println(address.String()) - return nil - }, - } - return cmd -} +// import ( +// "bufio" +// "fmt" + +// "github.com/cosmos/cosmos-sdk/client/input" +// "github.com/cosmos/cosmos-sdk/crypto/hd" +// "github.com/cosmos/go-bip39" +// "github.com/spf13/cobra" + +// band "github.com/bandprotocol/chain/v3/app" +// ) + +// const ( +// flagAccount = "account" +// flagIndex = "index" +// flagCoinType = "coin-type" +// flagRecover = "recover" +// ) + +// func keysCmd(c *Context) *cobra.Command { +// cmd := &cobra.Command{ +// Use: "keys", +// Aliases: []string{"k"}, +// Short: "Manage key held by the oracle process", +// } +// cmd.AddCommand(keysAddCmd(c)) +// cmd.AddCommand(keysDeleteCmd(c)) +// cmd.AddCommand(keysListCmd(c)) +// cmd.AddCommand(keysShowCmd(c)) +// return cmd +// } + +// func keysAddCmd(c *Context) *cobra.Command { +// cmd := &cobra.Command{ +// Use: "add [name]", +// Aliases: []string{"a"}, +// Short: "Add a new key to the keychain", +// Args: cobra.ExactArgs(1), +// RunE: func(cmd *cobra.Command, args []string) error { +// var mnemonic string +// recover, err := cmd.Flags().GetBool(flagRecover) +// if err != nil { +// return err +// } +// if recover { +// inBuf := bufio.NewReader(cmd.InOrStdin()) +// var err error +// mnemonic, err = input.GetString("Enter your bip39 mnemonic", inBuf) +// if err != nil { +// return err +// } +// } else { +// seed, err := bip39.NewEntropy(256) +// if err != nil { +// return err +// } +// mnemonic, err = bip39.NewMnemonic(seed) +// if err != nil { +// return err +// } +// fmt.Printf("Mnemonic: %s\n", mnemonic) +// } + +// if err != nil { +// return err +// } +// account, err := cmd.Flags().GetUint32(flagAccount) +// if err != nil { +// return err +// } +// index, err := cmd.Flags().GetUint32(flagIndex) +// if err != nil { +// return err +// } +// hdPath := hd.CreateHDPath(band.Bip44CoinType, account, index) +// info, err := keybase.NewAccount(args[0], mnemonic, "", hdPath.String(), hd.Secp256k1) +// if err != nil { +// return err +// } + +// address, err := info.GetAddress() +// if err != nil { +// return err +// } + +// fmt.Printf("Address: %s\n", address.String()) +// return nil +// }, +// } +// cmd.Flags().Bool(flagRecover, false, "Provide seed phrase to recover existing key instead of creating") +// cmd.Flags().Uint32(flagAccount, 0, "Account number for HD derivation") +// cmd.Flags().Uint32(flagIndex, 0, "Address index number for HD derivation") +// return cmd +// } + +// func keysDeleteCmd(c *Context) *cobra.Command { +// cmd := &cobra.Command{ +// Use: "delete [name]", +// Aliases: []string{"d"}, +// Short: "Delete a key from the keychain", +// Args: cobra.ExactArgs(1), +// RunE: func(cmd *cobra.Command, args []string) error { +// name := args[0] +// _, err := keybase.Key(name) +// if err != nil { +// return err +// } + +// inBuf := bufio.NewReader(cmd.InOrStdin()) +// confirmInput, err := input.GetString("Key will be deleted. Continue?[y/N]", inBuf) +// if err != nil { +// return err +// } + +// if confirmInput != "y" { +// fmt.Println("Cancel") +// return nil +// } +// if err := keybase.Delete(name); err != nil { +// return err +// } + +// fmt.Printf("Deleted key: %s\n", name) +// return nil +// }, +// } +// return cmd +// } + +// func keysListCmd(c *Context) *cobra.Command { +// cmd := &cobra.Command{ +// Use: "list", +// Aliases: []string{"l"}, +// Short: "List all the keys in the keychain", +// Args: cobra.ExactArgs(0), +// RunE: func(cmd *cobra.Command, args []string) error { +// keys, err := keybase.List() +// if err != nil { +// return err +// } +// for _, key := range keys { +// address, err := key.GetAddress() +// if err != nil { +// return err +// } + +// fmt.Printf("%s => %s\n", key.Name, address.String()) +// } +// return nil +// }, +// } +// return cmd +// } + +// func keysShowCmd(c *Context) *cobra.Command { +// cmd := &cobra.Command{ +// Use: "show [name]", +// Aliases: []string{"s"}, +// Short: "Show address from name in the keychain", +// Args: cobra.ExactArgs(1), +// RunE: func(cmd *cobra.Command, args []string) error { +// name := args[0] + +// key, err := keybase.Key(name) +// if err != nil { +// return err +// } + +// address, err := key.GetAddress() +// if err != nil { +// return err +// } + +// fmt.Println(address.String()) +// return nil +// }, +// } +// return cmd +// } diff --git a/cmd/faucet/main.go b/cmd/faucet/main.go index ca2ae08ff..87a13f594 100644 --- a/cmd/faucet/main.go +++ b/cmd/faucet/main.go @@ -1,85 +1,85 @@ package main -import ( - "fmt" - "os" - "path" +// import ( +// "fmt" +// "os" +// "path" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/crypto/keyring" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cobra" - "github.com/spf13/viper" +// "github.com/cosmos/cosmos-sdk/client/flags" +// "github.com/cosmos/cosmos-sdk/crypto/keyring" +// sdk "github.com/cosmos/cosmos-sdk/types" +// "github.com/spf13/cobra" +// "github.com/spf13/viper" - band "github.com/bandprotocol/chain/v3/app" -) +// band "github.com/bandprotocol/chain/v3/app" +// ) -const ( - flagPort = "port" - flagAmount = "amount" -) +// const ( +// flagPort = "port" +// flagAmount = "amount" +// ) -// Config data structure for faucet server. -type Config struct { - ChainID string `mapstructure:"chain-id"` // ChainID of the target chain - NodeURI string `mapstructure:"node"` // Remote RPC URI of BandChain node to connect to - GasPrices string `mapstructure:"gas-prices"` // Gas prices of the transaction - Port string `mapstructure:"port"` // Port of faucet service - Amount int64 `mapstructure:"amount"` // Amount of BAND for each request -} +// // Config data structure for faucet server. +// type Config struct { +// ChainID string `mapstructure:"chain-id"` // ChainID of the target chain +// NodeURI string `mapstructure:"node"` // Remote RPC URI of BandChain node to connect to +// GasPrices string `mapstructure:"gas-prices"` // Gas prices of the transaction +// Port string `mapstructure:"port"` // Port of faucet service +// Amount int64 `mapstructure:"amount"` // Amount of BAND for each request +// } -// Global instances. -var ( - cfg Config - keybase keyring.Keyring -) +// // Global instances. +// var ( +// cfg Config +// keybase keyring.Keyring +// ) -func initConfig(cmd *cobra.Command) error { - home, err := cmd.PersistentFlags().GetString(flags.FlagHome) - if err != nil { - return err - } - viper.SetConfigFile(path.Join(home, "config.yaml")) - _ = viper.ReadInConfig() // If we fail to read config file, we'll just rely on cmd flags. - if err := viper.Unmarshal(&cfg); err != nil { - return err - } - return nil -} +// func initConfig(cmd *cobra.Command) error { +// home, err := cmd.PersistentFlags().GetString(flags.FlagHome) +// if err != nil { +// return err +// } +// viper.SetConfigFile(path.Join(home, "config.yaml")) +// _ = viper.ReadInConfig() // If we fail to read config file, we'll just rely on cmd flags. +// if err := viper.Unmarshal(&cfg); err != nil { +// return err +// } +// return nil +// } -func main() { - appConfig := sdk.GetConfig() - band.SetBech32AddressPrefixesAndBip44CoinTypeAndSeal(appConfig) +// func main() { +// appConfig := sdk.GetConfig() +// band.SetBech32AddressPrefixesAndBip44CoinTypeAndSeal(appConfig) - ctx := &Context{} - rootCmd := &cobra.Command{ - Use: "faucet", - Short: "Faucet server for devnet", - } +// ctx := &Context{} +// rootCmd := &cobra.Command{ +// Use: "faucet", +// Short: "Faucet server for devnet", +// } - rootCmd.AddCommand( - configCmd(), - keysCmd(ctx), - runCmd(ctx), - ) - rootCmd.PersistentPreRunE = func(_ *cobra.Command, _ []string) error { - home, err := rootCmd.PersistentFlags().GetString(flags.FlagHome) - if err != nil { - return err - } - if err := os.MkdirAll(home, os.ModePerm); err != nil { - return err - } +// rootCmd.AddCommand( +// configCmd(), +// keysCmd(ctx), +// runCmd(ctx), +// ) +// rootCmd.PersistentPreRunE = func(_ *cobra.Command, _ []string) error { +// home, err := rootCmd.PersistentFlags().GetString(flags.FlagHome) +// if err != nil { +// return err +// } +// if err := os.MkdirAll(home, os.ModePerm); err != nil { +// return err +// } - keybase, err = keyring.New("band", keyring.BackendTest, home, nil, cdc) - if err != nil { - return err - } - return initConfig(rootCmd) - } - rootCmd.PersistentFlags().String(flags.FlagHome, os.ExpandEnv("$HOME/.faucet"), "home directory") - if err := rootCmd.Execute(); err != nil { - fmt.Println(err) - os.Exit(1) - } -} +// keybase, err = keyring.New("band", keyring.BackendTest, home, nil, cdc) +// if err != nil { +// return err +// } +// return initConfig(rootCmd) +// } +// rootCmd.PersistentFlags().String(flags.FlagHome, os.ExpandEnv("$HOME/.faucet"), "home directory") +// if err := rootCmd.Execute(); err != nil { +// fmt.Println(err) +// os.Exit(1) +// } +// } diff --git a/cmd/faucet/run.go b/cmd/faucet/run.go index 413d0942c..e995c5ccb 100644 --- a/cmd/faucet/run.go +++ b/cmd/faucet/run.go @@ -1,94 +1,98 @@ package main -import ( - "errors" +// import ( +// "errors" - httpclient "github.com/cometbft/cometbft/rpc/client/http" - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/crypto/keyring" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/gin-gonic/gin" - "github.com/gin-gonic/gin/binding" - "github.com/spf13/cobra" - "github.com/spf13/viper" -) +// "github.com/gin-gonic/gin" +// "github.com/gin-gonic/gin/binding" +// "github.com/spf13/cobra" +// "github.com/spf13/viper" -func runCmd(c *Context) *cobra.Command { - cmd := &cobra.Command{ - Use: "run", - Aliases: []string{"r"}, - Short: "Run the oracle process", - Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { - if cfg.ChainID == "" { - return errors.New("chain ID must not be empty") - } - keys, err := keybase.List() - if err != nil { - return err - } - if len(keys) == 0 { - return errors.New("no key available") - } - c.keys = make(chan keyring.Record, len(keys)) - for _, key := range keys { - c.keys <- *key - } - c.gasPrices, err = sdk.ParseDecCoins(cfg.GasPrices) - if err != nil { - return err - } - c.client, err = httpclient.New(cfg.NodeURI, "/websocket") - if err != nil { - return err - } - c.amount = sdk.NewCoins(sdk.NewCoin("uband", math.NewInt(cfg.Amount))) - r := gin.Default() +// httpclient "github.com/cometbft/cometbft/rpc/client/http" - // add cors - r.Use(func(c *gin.Context) { - c.Writer.Header().Set("Access-Control-Allow-Origin", "*") - c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") - c.Writer.Header(). - Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With") - c.Writer.Header().Set("Access-Control-Allow-Methods", "POST") +// "cosmossdk.io/math" - if c.Request.Method == "OPTIONS" { - c.AbortWithStatus(204) - return - } - }) +// "github.com/cosmos/cosmos-sdk/client/flags" +// "github.com/cosmos/cosmos-sdk/crypto/keyring" +// sdk "github.com/cosmos/cosmos-sdk/types" +// ) - // rate limit by ip - r.Use(NewRateLimitMiddleware(func(gc *gin.Context) (string, error) { - return gc.ClientIP(), nil - })) +// func runCmd(c *Context) *cobra.Command { +// cmd := &cobra.Command{ +// Use: "run", +// Aliases: []string{"r"}, +// Short: "Run the oracle process", +// Args: cobra.ExactArgs(0), +// RunE: func(cmd *cobra.Command, args []string) error { +// if cfg.ChainID == "" { +// return errors.New("chain ID must not be empty") +// } +// keys, err := keybase.List() +// if err != nil { +// return err +// } +// if len(keys) == 0 { +// return errors.New("no key available") +// } +// c.keys = make(chan keyring.Record, len(keys)) +// for _, key := range keys { +// c.keys <- *key +// } +// c.gasPrices, err = sdk.ParseDecCoins(cfg.GasPrices) +// if err != nil { +// return err +// } +// c.client, err = httpclient.New(cfg.NodeURI, "/websocket") +// if err != nil { +// return err +// } +// c.amount = sdk.NewCoins(sdk.NewCoin("uband", math.NewInt(cfg.Amount))) +// r := gin.Default() - // rate limit by address - r.Use(NewRateLimitMiddleware(func(gc *gin.Context) (string, error) { - var req Request - if err := gc.ShouldBindBodyWith(&req, binding.JSON); err != nil { - return "", err - } - return req.Address, nil - })) +// // add cors +// r.Use(func(c *gin.Context) { +// c.Writer.Header().Set("Access-Control-Allow-Origin", "*") +// c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") +// c.Writer.Header(). +// Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With") +// c.Writer.Header().Set("Access-Control-Allow-Methods", "POST") - r.POST("/request", func(gc *gin.Context) { - handleRequest(gc, c) - }) +// if c.Request.Method == "OPTIONS" { +// c.AbortWithStatus(204) +// return +// } +// }) - return r.Run("0.0.0.0:" + cfg.Port) - }, - } - cmd.Flags().String(flags.FlagChainID, "", "chain ID of BandChain network") - cmd.Flags().String(flags.FlagNode, "tcp://localhost:26657", "RPC url to BandChain node") - cmd.Flags().String(flags.FlagGasPrices, "", "gas prices for report transaction") - cmd.Flags().String(flagPort, "5005", "port of faucet service") - cmd.Flags().Int64(flagAmount, 10000000, "amount in uband for each request") - _ = viper.BindPFlag(flags.FlagChainID, cmd.Flags().Lookup(flags.FlagChainID)) - _ = viper.BindPFlag(flags.FlagNode, cmd.Flags().Lookup(flags.FlagNode)) - _ = viper.BindPFlag(flags.FlagGasPrices, cmd.Flags().Lookup(flags.FlagGasPrices)) - _ = viper.BindPFlag(flagPort, cmd.Flags().Lookup(flagPort)) - _ = viper.BindPFlag(flagAmount, cmd.Flags().Lookup(flagAmount)) - return cmd -} +// // rate limit by ip +// r.Use(NewRateLimitMiddleware(func(gc *gin.Context) (string, error) { +// return gc.ClientIP(), nil +// })) + +// // rate limit by address +// r.Use(NewRateLimitMiddleware(func(gc *gin.Context) (string, error) { +// var req Request +// if err := gc.ShouldBindBodyWith(&req, binding.JSON); err != nil { +// return "", err +// } +// return req.Address, nil +// })) + +// r.POST("/request", func(gc *gin.Context) { +// handleRequest(gc, c) +// }) + +// return r.Run("0.0.0.0:" + cfg.Port) +// }, +// } +// cmd.Flags().String(flags.FlagChainID, "", "chain ID of BandChain network") +// cmd.Flags().String(flags.FlagNode, "tcp://localhost:26657", "RPC url to BandChain node") +// cmd.Flags().String(flags.FlagGasPrices, "", "gas prices for report transaction") +// cmd.Flags().String(flagPort, "5005", "port of faucet service") +// cmd.Flags().Int64(flagAmount, 10000000, "amount in uband for each request") +// _ = viper.BindPFlag(flags.FlagChainID, cmd.Flags().Lookup(flags.FlagChainID)) +// _ = viper.BindPFlag(flags.FlagNode, cmd.Flags().Lookup(flags.FlagNode)) +// _ = viper.BindPFlag(flags.FlagGasPrices, cmd.Flags().Lookup(flags.FlagGasPrices)) +// _ = viper.BindPFlag(flagPort, cmd.Flags().Lookup(flagPort)) +// _ = viper.BindPFlag(flagAmount, cmd.Flags().Lookup(flagAmount)) +// return cmd +// } diff --git a/go.mod b/go.mod index f140c3ff5..2044e5372 100644 --- a/go.mod +++ b/go.mod @@ -53,6 +53,7 @@ require ( // extra/rest deps require ( + cosmossdk.io/collections v0.4.0 github.com/gin-gonic/gin v1.8.1 github.com/go-sql-driver/mysql v1.8.1 github.com/patrickmn/go-cache v2.1.0+incompatible @@ -72,7 +73,6 @@ require ( cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.9 // indirect cloud.google.com/go/storage v1.41.0 // indirect - cosmossdk.io/collections v0.4.0 // indirect cosmossdk.io/x/circuit v0.1.1 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect diff --git a/hooks/emitter/authz.go b/hooks/emitter/authz.go index 59c218fa1..fccb8d2ae 100644 --- a/hooks/emitter/authz.go +++ b/hooks/emitter/authz.go @@ -61,10 +61,13 @@ func (h *Hook) handleMsgExec( h.handleMsgReportData(ctx, txHash, msg, grantee) default: // add signers for this message into the transaction - signers := msg.GetSigners() + signers, _, err := h.cdc.GetMsgV1Signers(msg) + if err != nil { + continue + } addrs := make([]string, len(signers)) for idx, signer := range signers { - addrs[idx] = signer.String() + addrs[idx] = sdk.AccAddress(signer).String() } h.AddAccountsInTx(addrs...) h.handleMsg(ctx, txHash, msg, log, subMsgs[i]["msg"].(common.JsDict)) diff --git a/hooks/emitter/channel.go b/hooks/emitter/channel.go index 04c3b633b..b6f98358e 100644 --- a/hooks/emitter/channel.go +++ b/hooks/emitter/channel.go @@ -11,7 +11,6 @@ import ( "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" "github.com/bandprotocol/chain/v3/hooks/common" - oraclekeeper "github.com/bandprotocol/chain/v3/x/oracle/keeper" oracletypes "github.com/bandprotocol/chain/v3/x/oracle/types" ) @@ -211,7 +210,7 @@ func (h *Hook) extractOracleRequestPacket( if events, ok := evMap[oracletypes.EventTypeRequest+"."+oracletypes.AttributeKeyID]; ok { var prepareGasUsed uint64 if eventRequestGasUsed, ok := evMap[oracletypes.EventTypeRequest+"."+oracletypes.AttributeKeyGasUsed]; ok { - prepareGasUsed = oraclekeeper.ConvertToGas(common.Atoui(eventRequestGasUsed[0])) + prepareGasUsed = ConvertToGas(common.Atoui(eventRequestGasUsed[0])) } id := oracletypes.RequestID(common.Atoi(events[0])) @@ -326,13 +325,16 @@ func (h *Hook) extractInterchainAccountPacket( var innerMessages []common.JsDict switch data.Type { case icatypes.EXECUTE_TX: - msgs, _ = icatypes.DeserializeCosmosTx(h.cdc, data.Data) + msgs, _ = icatypes.DeserializeCosmosTx(h.cdc, data.Data, icatypes.EncodingProtobuf) for _, msg := range msgs { // add signers for this message into the transaction - signers := msg.GetSigners() + signers, _, err := h.cdc.GetMsgV1Signers(msg) + if err != nil { + continue + } addrs := make([]string, len(signers)) for idx, signer := range signers { - addrs[idx] = signer.String() + addrs[idx] = sdk.AccAddress(signer).String() } h.AddAccountsInTx(addrs...) diff --git a/hooks/emitter/decoder.go b/hooks/emitter/decoder.go index 11ecb4b0b..b44ea408f 100644 --- a/hooks/emitter/decoder.go +++ b/hooks/emitter/decoder.go @@ -369,7 +369,7 @@ func DecodeMsgSubmitProposal(msg *govv1.MsgSubmitProposal, detail common.JsDict) func DecodeV1beta1MsgSubmitProposal(msg *govv1beta1.MsgSubmitProposal, detail common.JsDict) { detail["content"] = msg.GetContent() detail["initial_deposit"] = msg.GetInitialDeposit() - detail["proposer"] = msg.GetProposer() + detail["proposer"] = msg.Proposer } func DecodeMsgDeposit(msg *govv1.MsgDeposit, detail common.JsDict) { diff --git a/hooks/emitter/decoder_test.go b/hooks/emitter/decoder_test.go index 545dca74a..af982276e 100644 --- a/hooks/emitter/decoder_test.go +++ b/hooks/emitter/decoder_test.go @@ -5,32 +5,46 @@ import ( "encoding/hex" "encoding/json" "fmt" + "os" "testing" "time" + "github.com/stretchr/testify/suite" + + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + commitmenttypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" + ibctmtypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + "cosmossdk.io/log" + "cosmossdk.io/math" upgradetypes "cosmossdk.io/x/upgrade/types" + + cosmosdb "github.com/cosmos/cosmos-db" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/authz" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" - ibctmtypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - "github.com/stretchr/testify/suite" + band "github.com/bandprotocol/chain/v3/app" "github.com/bandprotocol/chain/v3/hooks/common" "github.com/bandprotocol/chain/v3/hooks/emitter" - bandtesting "github.com/bandprotocol/chain/v3/testing" - "github.com/bandprotocol/chain/v3/testing/ibctesting" oracletypes "github.com/bandprotocol/chain/v3/x/oracle/types" ) +const ( + TestDefaultPrepareGas uint64 = 40000 + TestDefaultExecuteGas uint64 = 300000 +) + var ( SenderAddress = sdk.AccAddress(genAddresFromString("Sender")) ReceiverAddress = sdk.AccAddress(genAddresFromString("Receiver")) @@ -43,21 +57,40 @@ var ( GranterAddress = sdk.AccAddress(genAddresFromString("Granter")) GranteeAddress = sdk.AccAddress(genAddresFromString("Grantee")) + Coins1000000uband = sdk.NewCoins(sdk.NewInt64Coin("uband", 1000000)) + Coins100000000uband = sdk.NewCoins(sdk.NewInt64Coin("uband", 100000000)) + clientHeight = clienttypes.NewHeight(0, 10) - Delegation = stakingtypes.NewDelegation(DelegatorAddress, ValAddress, sdk.NewDec(1)) - SelfDelegation = sdk.NewCoin("uband", sdk.NewInt(1)) - MinSelfDelegation = sdk.NewInt(1) + Delegation stakingtypes.Delegation + SelfDelegation = sdk.NewInt64Coin("uband", 1) + MinSelfDelegation = math.NewInt(1) Description = stakingtypes.NewDescription("moniker", "identity", "website", "securityContact", "details") - CommissionRate = stakingtypes.NewCommissionRates(sdk.NewDec(1), sdk.NewDec(5), sdk.NewDec(5)) - NewRate = sdk.NewDec(1) - PubKey = newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB50") - Amount = sdk.NewCoin("uband", sdk.NewInt(1)) + CommissionRate = stakingtypes.NewCommissionRates( + math.LegacyNewDec(1), + math.LegacyNewDec(5), + math.LegacyNewDec(5), + ) + NewRate = math.LegacyNewDec(1) + PubKey = newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB50") + Amount = sdk.NewCoin("uband", math.NewInt(1)) content, _ = govv1beta1.ContentFromProposalType("Title", "Desc", "Text") - proposalMsg = banktypes.NewMsgSend(SenderAddress, ReceiverAddress, sdk.Coins{Amount}) + proposalMsg sdk.Msg ) +func init() { + band.SetBech32AddressPrefixesAndBip44CoinTypeAndSeal(sdk.GetConfig()) + + // Build msg / delegation after seal prefix + proposalMsg = banktypes.NewMsgSend(SenderAddress, ReceiverAddress, sdk.Coins{Amount}) + Delegation = stakingtypes.NewDelegation( + DelegatorAddress.String(), + ValAddress.String(), + math.LegacyNewDec(1), + ) +} + type DecoderTestSuite struct { suite.Suite @@ -65,18 +98,46 @@ type DecoderTestSuite struct { chainA *ibctesting.TestChain chainB *ibctesting.TestChain + + dirs []string } func (suite *DecoderTestSuite) SetupTest() { + ibctesting.DefaultTestingAppInit = func() (ibctesting.TestingApp, map[string]json.RawMessage) { + dir, err := os.MkdirTemp("", "bandd-test-home") + suite.Require().NoError(err) + suite.dirs = append(suite.dirs, dir) + app := band.NewBandApp( + log.NewNopLogger(), + cosmosdb.NewMemDB(), + nil, + true, + map[int64]bool{}, + dir, + sims.EmptyAppOptions{}, + 100, + ) + + g := band.GenesisStateWithValSet(app, dir) + return app, g + } suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2) - suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(0)) - suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(2)) +} + +func (suite *DecoderTestSuite) TearDownTest() { + for _, dir := range suite.dirs { + os.RemoveAll(dir) + } } func NewOraclePath(chainA, chainB *ibctesting.TestChain) *ibctesting.Path { path := ibctesting.NewPath(chainA, chainB) - path.EndpointA.ChannelConfig.PortID = ibctesting.OraclePort - path.EndpointB.ChannelConfig.PortID = ibctesting.OraclePort + path.EndpointA.ChannelConfig.PortID = oracletypes.ModuleName + path.EndpointA.ChannelConfig.Version = oracletypes.Version + path.EndpointB.ChannelConfig.PortID = oracletypes.ModuleName + path.EndpointB.ChannelConfig.Version = oracletypes.Version return path } @@ -100,7 +161,7 @@ func newPubKey(pk string) (res cryptotypes.PubKey) { func (suite *DecoderTestSuite) testCompareJson(msg common.JsDict, expect string) { res, _ := json.Marshal(msg) - suite.Require().Equal(string(res), expect) + suite.Require().Equal(expect, string(res)) } func (suite *DecoderTestSuite) testContains(msg common.JsDict, expect string) { @@ -190,9 +251,9 @@ func (suite *DecoderTestSuite) TestDecodeMsgRequestData() { 1, 1, "cleint_id", - bandtesting.Coins100000000uband, - bandtesting.TestDefaultPrepareGas, - bandtesting.TestDefaultExecuteGas, + Coins100000000uband, + TestDefaultPrepareGas, + TestDefaultExecuteGas, SenderAddress, ) emitter.DecodeMsgRequestData(msg, detail) @@ -230,7 +291,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgCreateDataSource() { "name", "desc", []byte("exec"), - bandtesting.Coins1000000uband, + Coins1000000uband, TreasuryAddress, OwnerAddress, SenderAddress, @@ -267,7 +328,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgEditDataSource() { "name", "desc", []byte("exec"), - bandtesting.Coins1000000uband, + Coins1000000uband, TreasuryAddress, OwnerAddress, SenderAddress, @@ -325,18 +386,18 @@ func (suite *DecoderTestSuite) TestDecodeMsgCreateClient() { emitter.DecodeMsgCreateClient(msg, detail) suite.testCompareJson(detail, fmt.Sprintf( - "{\"client_state\":{\"chain_id\":\"testchain0\",\"trust_level\":{\"numerator\":1,\"denominator\":3},\"trusting_period\":1209600000000000,\"unbonding_period\":1814400000000000,\"max_clock_drift\":10000000000,\"frozen_height\":{},\"latest_height\":{\"revision_height\":10},\"proof_specs\":[{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":33,\"min_prefix_length\":4,\"max_prefix_length\":12,\"hash\":1}},{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":32,\"min_prefix_length\":1,\"max_prefix_length\":1,\"hash\":1}}],\"upgrade_path\":[\"upgrade\",\"upgradedIBCState\"]},\"consensus_state\":{\"timestamp\":\"2020-01-02T00:00:00Z\",\"root\":{\"hash\":\"%s\"},\"next_validators_hash\":\"%s\"},\"signer\":\"band12djkuer9wgqqqqqqqqqqqqqqqqqqqqqqck96t0\"}", + "{\"client_state\":{\"chain_id\":\"testchain1-1\",\"trust_level\":{\"numerator\":1,\"denominator\":3},\"trusting_period\":1209600000000000,\"unbonding_period\":1814400000000000,\"max_clock_drift\":10000000000,\"frozen_height\":{},\"latest_height\":{\"revision_height\":10},\"proof_specs\":[{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":33,\"min_prefix_length\":4,\"max_prefix_length\":12,\"hash\":1}},{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":32,\"min_prefix_length\":1,\"max_prefix_length\":1,\"hash\":1}}],\"upgrade_path\":[\"upgrade\",\"upgradedIBCState\"]},\"consensus_state\":{\"timestamp\":\"2020-01-02T00:00:00Z\",\"root\":{\"hash\":\"%s\"},\"next_validators_hash\":\"%s\"},\"signer\":\"band12djkuer9wgqqqqqqqqqqqqqqqqqqqqqqck96t0\"}", b64RootHash, consensus.NextValidatorsHash, ), ) // MsgCreateClient example - // {"client_state":{"chain_id":"testchain0","trust_level":{"numerator":1,"denominator":3},"trusting_period":1209600000000000,"unbonding_period":1814400000000000,"max_clock_drift":10000000000,"frozen_height":{},"latest_height":{"revision_height":10},"proof_specs":[{"leaf_spec":{"hash":1,"prehash_value":1,"length":1,"prefix":"AA=="},"inner_spec":{"child_order":[0,1],"child_size":33,"min_prefix_length":4,"max_prefix_length":12,"hash":1}},{"leaf_spec":{"hash":1,"prehash_value":1,"length":1,"prefix":"AA=="},"inner_spec":{"child_order":[0,1],"child_size":32,"min_prefix_length":1,"max_prefix_length":1,"hash":1}}],"upgrade_path":["upgrade","upgradedIBCState"]},"consensus_state":{"timestamp":"2020-01-02T00:00:00Z","root":{"hash":"I0ofcG04FYhAyDFzygf8Q/6JEpBactgfhm68fSXwBro="},"next_validators_hash":"C8277795F71B45089E58F0994DCF4F88BECD5770C7E492A9A25B706888D6BF2F"},"signer":"band12djkuer9wgqqqqqqqqqqqqqqqqqqqqqqck96t0"} + // {"client_state":{"chain_id":"testchain1-1","trust_level":{"numerator":1,"denominator":3},"trusting_period":1209600000000000,"unbonding_period":1814400000000000,"max_clock_drift":10000000000,"frozen_height":{},"latest_height":{"revision_height":10},"proof_specs":[{"leaf_spec":{"hash":1,"prehash_value":1,"length":1,"prefix":"AA=="},"inner_spec":{"child_order":[0,1],"child_size":33,"min_prefix_length":4,"max_prefix_length":12,"hash":1}},{"leaf_spec":{"hash":1,"prehash_value":1,"length":1,"prefix":"AA=="},"inner_spec":{"child_order":[0,1],"child_size":32,"min_prefix_length":1,"max_prefix_length":1,"hash":1}}],"upgrade_path":["upgrade","upgradedIBCState"]},"consensus_state":{"timestamp":"2020-01-02T00:00:00Z","root":{"hash":"I0ofcG04FYhAyDFzygf8Q/6JEpBactgfhm68fSXwBro="},"next_validators_hash":"C8277795F71B45089E58F0994DCF4F88BECD5770C7E492A9A25B706888D6BF2F"},"signer":"band12djkuer9wgqqqqqqqqqqqqqqqqqqqqqqck96t0"} } func (suite *DecoderTestSuite) TestDecodeV1beta1MsgSubmitProposal() { detail := make(common.JsDict) - msg, _ := govv1beta1.NewMsgSubmitProposal(content, bandtesting.Coins1000000uband, SenderAddress) + msg, _ := govv1beta1.NewMsgSubmitProposal(content, Coins1000000uband, SenderAddress) emitter.DecodeV1beta1MsgSubmitProposal(msg, detail) suite.testCompareJson( detail, @@ -345,14 +406,16 @@ func (suite *DecoderTestSuite) TestDecodeV1beta1MsgSubmitProposal() { } func (suite *DecoderTestSuite) TestDecodeMsgSubmitProposal() { + fmt.Println(sdk.GetConfig().GetBech32AccountAddrPrefix()) detail := make(common.JsDict) msg, _ := govv1.NewMsgSubmitProposal( []sdk.Msg{proposalMsg}, - bandtesting.Coins1000000uband, + Coins1000000uband, SenderAddress.String(), "metadata", "title", "summary", + true, ) emitter.DecodeMsgSubmitProposal(msg, detail) suite.testCompareJson( @@ -363,7 +426,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgSubmitProposal() { func (suite *DecoderTestSuite) TestDecodeV1beta1MsgDeposit() { detail := make(common.JsDict) - msg := govv1beta1.NewMsgDeposit(SenderAddress, 1, bandtesting.Coins1000000uband) + msg := govv1beta1.NewMsgDeposit(SenderAddress, 1, Coins1000000uband) emitter.DecodeV1beta1MsgDeposit(msg, detail) suite.testCompareJson( detail, @@ -373,7 +436,7 @@ func (suite *DecoderTestSuite) TestDecodeV1beta1MsgDeposit() { func (suite *DecoderTestSuite) TestDecodeMsgDeposit() { detail := make(common.JsDict) - msg := govv1.NewMsgDeposit(SenderAddress, 1, bandtesting.Coins1000000uband) + msg := govv1.NewMsgDeposit(SenderAddress, 1, Coins1000000uband) emitter.DecodeMsgDeposit(msg, detail) suite.testCompareJson( detail, @@ -402,8 +465,9 @@ func (suite *DecoderTestSuite) TestDecodeMsgVote() { func (suite *DecoderTestSuite) TestDecodeMsgCreateValidator() { detail := make(common.JsDict) + fmt.Println(ValAddress.String()) msg, _ := stakingtypes.NewMsgCreateValidator( - ValAddress, + ValAddress.String(), PubKey, SelfDelegation, Description, @@ -414,13 +478,13 @@ func (suite *DecoderTestSuite) TestDecodeMsgCreateValidator() { emitter.DecodeMsgCreateValidator(msg, detail) suite.testCompareJson( detail, - "{\"commission\":{\"rate\":\"1.000000000000000000\",\"max_rate\":\"5.000000000000000000\",\"max_change_rate\":\"5.000000000000000000\"},\"delegator_address\":\"band12eskc6tyv96x7usqqqqqqqqqqqqqqqqqzep99r\",\"description\":{\"details\":\"details\",\"identity\":\"identity\",\"moniker\":\"moniker\",\"security_contact\":\"securityContact\",\"website\":\"website\"},\"min_self_delegation\":\"1\",\"pubkey\":\"0b485cfc0eecc619440448436f8fc9df40566f2369e72400281454cb552afb50\",\"validator_address\":\"bandvaloper12eskc6tyv96x7usqqqqqqqqqqqqqqqqqw09xqg\",\"value\":{\"denom\":\"uband\",\"amount\":\"1\"}}", + "{\"commission\":{\"rate\":\"1.000000000000000000\",\"max_rate\":\"5.000000000000000000\",\"max_change_rate\":\"5.000000000000000000\"},\"delegator_address\":\"\",\"description\":{\"details\":\"details\",\"identity\":\"identity\",\"moniker\":\"moniker\",\"security_contact\":\"securityContact\",\"website\":\"website\"},\"min_self_delegation\":\"1\",\"pubkey\":\"0b485cfc0eecc619440448436f8fc9df40566f2369e72400281454cb552afb50\",\"validator_address\":\"bandvaloper12eskc6tyv96x7usqqqqqqqqqqqqqqqqqw09xqg\",\"value\":{\"denom\":\"uband\",\"amount\":\"1\"}}", ) } func (suite *DecoderTestSuite) TestDecodeMsgEditValidator() { detail := make(common.JsDict) - msg := stakingtypes.NewMsgEditValidator(ValAddress, Description, &NewRate, &MinSelfDelegation) + msg := stakingtypes.NewMsgEditValidator(ValAddress.String(), Description, &NewRate, &MinSelfDelegation) emitter.DecodeMsgEditValidator(msg, detail) suite.testCompareJson( @@ -431,7 +495,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgEditValidator() { func (suite *DecoderTestSuite) TestDecodeMsgDelegate() { detail := make(common.JsDict) - msg := stakingtypes.NewMsgDelegate(DelegatorAddress, ValAddress, Amount) + msg := stakingtypes.NewMsgDelegate(DelegatorAddress.String(), ValAddress.String(), Amount) emitter.DecodeMsgDelegate(msg, detail) suite.testCompareJson( @@ -442,7 +506,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgDelegate() { func (suite *DecoderTestSuite) TestDecodeMsgUndelegate() { detail := make(common.JsDict) - msg := stakingtypes.NewMsgUndelegate(DelegatorAddress, ValAddress, Amount) + msg := stakingtypes.NewMsgUndelegate(DelegatorAddress.String(), ValAddress.String(), Amount) emitter.DecodeMsgUndelegate(msg, detail) suite.testCompareJson( @@ -453,7 +517,12 @@ func (suite *DecoderTestSuite) TestDecodeMsgUndelegate() { func (suite *DecoderTestSuite) TestDecodeMsgBeginRedelegate() { detail := make(common.JsDict) - msg := stakingtypes.NewMsgBeginRedelegate(DelegatorAddress, ValAddress, ValAddress, Amount) + msg := stakingtypes.NewMsgBeginRedelegate( + DelegatorAddress.String(), + ValAddress.String(), + ValAddress.String(), + Amount, + ) emitter.DecodeMsgBeginRedelegate(msg, detail) suite.testCompareJson( @@ -472,10 +541,8 @@ func (suite *DecoderTestSuite) TestDecodeMsgUpdateClient() { emitter.DecodeMsgUpdateClient(msg, detail) suite.testContains( detail, - "{\"client_id\":\"tendermint\",\"header\":{\"signed_header\":{\"header\":{\"version\":{\"block\":11,\"app\":2},\"chain_id\":\"testchain0\",\"height\":3,\"time\":\"2020-01-02T00:00:00Z\",\"last_block_id\":{\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"part_set_header\":{\"total\":10000,\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"}}", + "{\"client_id\":\"tendermint\",\"header\":{\"signed_header\":{\"header\":{\"version\":{\"block\":11,\"app\":2},\"chain_id\":\"testchain1-1\",\"height\":2,\"time\":\"2020-01-02T00:00:00Z\",\"last_block_id\":{\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"part_set_header\":{\"total\":10000,\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"}}", ) - // MsgUpdateClient - // "{\"client_id\":\"tendermint\",\"header\":{\"signed_header\":{\"header\":{\"version\":{\"block\":11,\"app\":2},\"chain_id\":\"testchain0\",\"height\":3,\"time\":\"2020-01-02T00:00:00Z\",\"last_block_id\":{\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"part_set_header\":{\"total\":10000,\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"}},\"last_commit_hash\":\"VnnIEw5Rphpyx5BgGrYlqa65CvjT8weLaOs/wbJaknQ=\",\"data_hash\":\"bW4ouLmLUycELqUKV91G5syFHHLlKL3qpu/e7v5moLg=\",\"validators_hash\":\"35jAWHlQWSshlZrerDcsJd5H8LuvI80BB4ezq6fHiJw=\",\"next_validators_hash\":\"35jAWHlQWSshlZrerDcsJd5H8LuvI80BB4ezq6fHiJw=\",\"consensus_hash\":\"5eVmxB7Vfj/4zBDxhBeHiLj6pgKwfPH0JSF72BefHyQ=\",\"app_hash\":\"VnnIEw5Rphpyx5BgGrYlqa65CvjT8weLaOs/wbJaknQ=\",\"last_results_hash\":\"CS4FhjAkftYAmGOhLu4RfSbNnQi1rcqrN/KrNdtHWjc=\",\"evidence_hash\":\"c4ZdsI9J1YQokF04mrTKS5bkWjIGx6adQ6Xcc3LmBxQ=\",\"proposer_address\":\"f/nWW2sIpnlCMZ1XYLa/jtNzVak=\"},\"commit\":{\"height\":3,\"round\":1,\"block_id\":{\"hash\":\"Vo4riCF+F1W/yPgGPEjyunesQNWSSMyp5nE8r12NQV0=\",\"part_set_header\":{\"total\":3,\"hash\":\"hwgKOc/jNqZj6lwNm97vSTq9wYt8Pj4MjmYTVMGDFDI=\"}},\"signatures\":[{\"block_id_flag\":2,\"validator_address\":\"f/nWW2sIpnlCMZ1XYLa/jtNzVak=\",\"timestamp\":\"2020-01-02T00:00:00Z\",\"signature\":\"fvGxOLWnEYK5HxqogNmQ63b037/zi1LT3wC6ES/msdMst6yBsIRg44StmbzNUsZlWMfBWVs39myGcQgTYzgkUg==\"}]}},\"validator_set\":{\"validators\":[{\"address\":\"f/nWW2sIpnlCMZ1XYLa/jtNzVak=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"Arn/2FLDO4dVHxEGAx6QsWKxjHj1HEpjgtW4asUV8lIy\"}},\"voting_power\":1}],\"proposer\":{\"address\":\"f/nWW2sIpnlCMZ1XYLa/jtNzVak=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"Arn/2FLDO4dVHxEGAx6QsWKxjHj1HEpjgtW4asUV8lIy\"}},\"voting_power\":1},\"total_voting_power\":1},\"trusted_height\":{}},\"signer\":\"band12djkuer9wgqqqqqqqqqqqqqqqqqqqqqqck96t0\"}" } func (suite *DecoderTestSuite) TestDecodeMsgUpgradeClient() { @@ -485,7 +552,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgUpgradeClient() { detail := make(common.JsDict) lastHeight := clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) - cs, found := suite.chainA.App.IBCKeeper.ClientKeeper.GetClientState( + cs, found := suite.chainA.App.GetIBCKeeper().ClientKeeper.GetClientState( suite.chainA.GetContext(), path.EndpointA.ClientID, ) @@ -525,7 +592,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgUpgradeClient() { "{\"client_id\":\"07-tendermint-0\",\"client_state\":{\"chain_id\":\"newChainId\",\"trust_level\":{\"numerator\":1,\"denominator\":3},\"trusting_period\":1209600000000000,\"unbonding_period\":3024000000000000,\"max_clock_drift\":10000000000,\"frozen_height\":{},\"latest_height\":{\"revision_number\":1,\"revision_height\":1},\"proof_specs\":[{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":33,\"min_prefix_length\":4,\"max_prefix_length\":12,\"hash\":1}},{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":32,\"min_prefix_length\":1,\"max_prefix_length\":1,\"hash\":1}}],\"upgrade_path\":[\"upgrade\",\"upgradedIBCState\"]},\"consensus_state\":{\"timestamp\":\"0001-01-01T00:00:00Z\",\"root\":{},\"next_validators_hash\":\"6E65787456616C7348617368\"},", ) // MsgUpgradeClient - // "{\"client_id\":\"07-tendermint-0\",\"client_state\":{\"chain_id\":\"newChainId\",\"trust_level\":{\"numerator\":1,\"denominator\":3},\"trusting_period\":1209600000000000,\"unbonding_period\":3024000000000000,\"max_clock_drift\":10000000000,\"frozen_height\":{},\"latest_height\":{\"revision_number\":1,\"revision_height\":1},\"proof_specs\":[{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":33,\"min_prefix_length\":4,\"max_prefix_length\":12,\"hash\":1}},{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":32,\"min_prefix_length\":1,\"max_prefix_length\":1,\"hash\":1}}],\"upgrade_path\":[\"upgrade\",\"upgradedIBCState\"]},\"consensus_state\":{\"timestamp\":\"0001-01-01T00:00:00Z\",\"root\":{},\"next_validators_hash\":\"6E65787456616C7348617368\"},\"proof_upgrade_client\":\"CiYSJAoidXBncmFkZWRJQkNTdGF0ZS8xOC91cGdyYWRlZENsaWVudAquAQqrAQoHdXBncmFkZRIg47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFUaCQgBGAEgASoBACIlCAESIQG2RppbdEWeFVF5h90HmJZ/OIvuBr5jbE7mh/4a8ey+lSIlCAESIQHZm7f7BAECvMg69fhmRvif+axXjaVvh7wuDvibWJVoJiIlCAESIQGbHEApyKCI6yWJSWKQnvxTXX67FeS/avKzkttknO4VoA==\",\"proof_upgrade_consensus_state\":\"CikSJwoldXBncmFkZWRJQkNTdGF0ZS8xOC91cGdyYWRlZENvbnNTdGF0ZQquAQqrAQoHdXBncmFkZRIg47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFUaCQgBGAEgASoBACIlCAESIQG2RppbdEWeFVF5h90HmJZ/OIvuBr5jbE7mh/4a8ey+lSIlCAESIQHZm7f7BAECvMg69fhmRvif+axXjaVvh7wuDvibWJVoJiIlCAESIQGbHEApyKCI6yWJSWKQnvxTXX67FeS/avKzkttknO4VoA==\",\"signer\":\"band1ws6lm89d6xenm3cms264ejvxk8rurw55t4vpl9\"}" does not contain "{\"client_id\":\"tendermint\",\"header\":{\"signed_header\":{\"header\":{\"version\":{\"block\":11,\"app\":2},\"chain_id\":\"testchain0\",\"height\":3,\"time\":\"2020-01-02T00:00:00Z\",\"last_block_id\":{\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"part_set_header\":{\"total\":10000,\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"}}" + // "{\"client_id\":\"07-tendermint-0\",\"client_state\":{\"chain_id\":\"newChainId\",\"trust_level\":{\"numerator\":1,\"denominator\":3},\"trusting_period\":1209600000000000,\"unbonding_period\":3024000000000000,\"max_clock_drift\":10000000000,\"frozen_height\":{},\"latest_height\":{\"revision_number\":1,\"revision_height\":1},\"proof_specs\":[{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":33,\"min_prefix_length\":4,\"max_prefix_length\":12,\"hash\":1}},{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":32,\"min_prefix_length\":1,\"max_prefix_length\":1,\"hash\":1}}],\"upgrade_path\":[\"upgrade\",\"upgradedIBCState\"]},\"consensus_state\":{\"timestamp\":\"0001-01-01T00:00:00Z\",\"root\":{},\"next_validators_hash\":\"6E65787456616C7348617368\"},\"proof_upgrade_client\":\"CiYSJAoidXBncmFkZWRJQkNTdGF0ZS8xOC91cGdyYWRlZENsaWVudAquAQqrAQoHdXBncmFkZRIg47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFUaCQgBGAEgASoBACIlCAESIQG2RppbdEWeFVF5h90HmJZ/OIvuBr5jbE7mh/4a8ey+lSIlCAESIQHZm7f7BAECvMg69fhmRvif+axXjaVvh7wuDvibWJVoJiIlCAESIQGbHEApyKCI6yWJSWKQnvxTXX67FeS/avKzkttknO4VoA==\",\"proof_upgrade_consensus_state\":\"CikSJwoldXBncmFkZWRJQkNTdGF0ZS8xOC91cGdyYWRlZENvbnNTdGF0ZQquAQqrAQoHdXBncmFkZRIg47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFUaCQgBGAEgASoBACIlCAESIQG2RppbdEWeFVF5h90HmJZ/OIvuBr5jbE7mh/4a8ey+lSIlCAESIQHZm7f7BAECvMg69fhmRvif+axXjaVvh7wuDvibWJVoJiIlCAESIQGbHEApyKCI6yWJSWKQnvxTXX67FeS/avKzkttknO4VoA==\",\"signer\":\"band1ws6lm89d6xenm3cms264ejvxk8rurw55t4vpl9\"}" does not contain "{\"client_id\":\"tendermint\",\"header\":{\"signed_header\":{\"header\":{\"version\":{\"block\":11,\"app\":2},\"chain_id\":\"testchain1-1\",\"height\":3,\"time\":\"2020-01-02T00:00:00Z\",\"last_block_id\":{\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"part_set_header\":{\"total\":10000,\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"}}" } func (suite *DecoderTestSuite) TestDecodeMsgSubmitMisbehaviour() { @@ -540,6 +607,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgSubmitMisbehaviour() { suite.chainA.CurrentHeader.Time, suite.chainA.Vals, suite.chainA.Vals, + suite.chainA.Vals, suite.chainA.Signers, ) header2 := suite.chainA.CreateTMClientHeader( @@ -549,6 +617,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgSubmitMisbehaviour() { suite.chainA.CurrentHeader.Time.Add(time.Minute), suite.chainA.Vals, suite.chainA.Vals, + suite.chainA.Vals, suite.chainA.Signers, ) @@ -563,10 +632,8 @@ func (suite *DecoderTestSuite) TestDecodeMsgSubmitMisbehaviour() { emitter.DecodeMsgSubmitMisbehaviour(msg, detail) suite.testContains( detail, - "{\"client_id\":\"tendermint\",\"misbehaviour\":{\"client_id\":\"tendermint\",\"header_1\":{\"signed_header\":{\"header\":{\"version\":{\"block\":11,\"app\":2},\"chain_id\":\"testchain0\",\"height\":3,\"time\":\"2020-01-02T00:00:00Z\",\"last_block_id\":{\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"part_set_header\":{\"total\":10000,\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"}},\"last_commit_hash\":", + "{\"client_id\":\"tendermint\",\"misbehaviour\":{\"client_id\":\"tendermint\",\"header_1\":{\"signed_header\":{\"header\":{\"version\":{\"block\":11,\"app\":2},\"chain_id\":\"testchain1-1\",\"height\":2,\"time\":\"2020-01-02T00:00:00Z\",\"last_block_id\":{\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"part_set_header\":{\"total\":10000,\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"}},\"last_commit_hash\":", ) - // MsgSubmitMisbehaviour - // "{\"client_id\":\"tendermint\",\"misbehaviour\":{\"client_id\":\"tendermint\",\"header_1\":{\"signed_header\":{\"header\":{\"version\":{\"block\":11,\"app\":2},\"chain_id\":\"testchain0\",\"height\":3,\"time\":\"2020-01-02T00:00:00Z\",\"last_block_id\":{\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"part_set_header\":{\"total\":10000,\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"}},\"last_commit_hash\":\"Gy7QPczOYJhyvkFumSNmNOYFi0beSQP7K1T3U73ZPL0=\",\"data_hash\":\"bW4ouLmLUycELqUKV91G5syFHHLlKL3qpu/e7v5moLg=\",\"validators_hash\":\"UWHAFzvn3gBH0c928WeqdiwEY4ozNcuJsbO7i/ykGlI=\",\"next_validators_hash\":\"UWHAFzvn3gBH0c928WeqdiwEY4ozNcuJsbO7i/ykGlI=\",\"consensus_hash\":\"5eVmxB7Vfj/4zBDxhBeHiLj6pgKwfPH0JSF72BefHyQ=\",\"app_hash\":\"Gy7QPczOYJhyvkFumSNmNOYFi0beSQP7K1T3U73ZPL0=\",\"last_results_hash\":\"CS4FhjAkftYAmGOhLu4RfSbNnQi1rcqrN/KrNdtHWjc=\",\"evidence_hash\":\"c4ZdsI9J1YQokF04mrTKS5bkWjIGx6adQ6Xcc3LmBxQ=\",\"proposer_address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\"},\"commit\":{\"height\":3,\"round\":1,\"block_id\":{\"hash\":\"4BHQI7RdQzVdZjXlV5cFTWUX8FUUyZlRZlcJz57HDzU=\",\"part_set_header\":{\"total\":3,\"hash\":\"hwgKOc/jNqZj6lwNm97vSTq9wYt8Pj4MjmYTVMGDFDI=\"}},\"signatures\":[{\"block_id_flag\":2,\"validator_address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"timestamp\":\"2020-01-02T00:00:00Z\",\"signature\":\"QBI8sEcCn1EQv3uDlWOatFxlyfKSj8Yq9eUdrbL8Y4Yfhr5+oByFD4D91N45Cg9GFPbYpLtlb3CvEsH7oyvSHg==\"}]}},\"validator_set\":{\"validators\":[{\"address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"A6/xRIwBfvDbU2TkJs4rgKexroILGVJkTRUDkDMcbUX8\"}},\"voting_power\":1}],\"proposer\":{\"address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"A6/xRIwBfvDbU2TkJs4rgKexroILGVJkTRUDkDMcbUX8\"}},\"voting_power\":1},\"total_voting_power\":1},\"trusted_height\":{\"revision_height\":2},\"trusted_validators\":{\"validators\":[{\"address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"A6/xRIwBfvDbU2TkJs4rgKexroILGVJkTRUDkDMcbUX8\"}},\"voting_power\":1}],\"proposer\":{\"address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"A6/xRIwBfvDbU2TkJs4rgKexroILGVJkTRUDkDMcbUX8\"}},\"voting_power\":1},\"total_voting_power\":1}},\"header_2\":{\"signed_header\":{\"header\":{\"version\":{\"block\":11,\"app\":2},\"chain_id\":\"testchain0\",\"height\":3,\"time\":\"2020-01-02T00:01:00Z\",\"last_block_id\":{\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"part_set_header\":{\"total\":10000,\"hash\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"}},\"last_commit_hash\":\"Gy7QPczOYJhyvkFumSNmNOYFi0beSQP7K1T3U73ZPL0=\",\"data_hash\":\"bW4ouLmLUycELqUKV91G5syFHHLlKL3qpu/e7v5moLg=\",\"validators_hash\":\"UWHAFzvn3gBH0c928WeqdiwEY4ozNcuJsbO7i/ykGlI=\",\"next_validators_hash\":\"UWHAFzvn3gBH0c928WeqdiwEY4ozNcuJsbO7i/ykGlI=\",\"consensus_hash\":\"5eVmxB7Vfj/4zBDxhBeHiLj6pgKwfPH0JSF72BefHyQ=\",\"app_hash\":\"Gy7QPczOYJhyvkFumSNmNOYFi0beSQP7K1T3U73ZPL0=\",\"last_results_hash\":\"CS4FhjAkftYAmGOhLu4RfSbNnQi1rcqrN/KrNdtHWjc=\",\"evidence_hash\":\"c4ZdsI9J1YQokF04mrTKS5bkWjIGx6adQ6Xcc3LmBxQ=\",\"proposer_address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\"},\"commit\":{\"height\":3,\"round\":1,\"block_id\":{\"hash\":\"OIlOUMldL7DwSF/CwxhzwvbCkB06ZIMKLn91cGqmye4=\",\"part_set_header\":{\"total\":3,\"hash\":\"hwgKOc/jNqZj6lwNm97vSTq9wYt8Pj4MjmYTVMGDFDI=\"}},\"signatures\":[{\"block_id_flag\":2,\"validator_address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"timestamp\":\"2020-01-02T00:01:00Z\",\"signature\":\"2IrQF/dca6yjumwFw0BK7xbfxa5r3nxV2tpYh1my3IkDYRbTM/vmCyW6BiCRSCivuhM/9eoHKK/YAQAAZh8zcg==\"}]}},\"validator_set\":{\"validators\":[{\"address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"A6/xRIwBfvDbU2TkJs4rgKexroILGVJkTRUDkDMcbUX8\"}},\"voting_power\":1}],\"proposer\":{\"address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"A6/xRIwBfvDbU2TkJs4rgKexroILGVJkTRUDkDMcbUX8\"}},\"voting_power\":1},\"total_voting_power\":1},\"trusted_height\":{\"revision_height\":2},\"trusted_validators\":{\"validators\":[{\"address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"A6/xRIwBfvDbU2TkJs4rgKexroILGVJkTRUDkDMcbUX8\"}},\"voting_power\":1}],\"proposer\":{\"address\":\"H6sPOQrXCVy4QN7pv0ealpUP1zE=\",\"pub_key\":{\"Sum\":{\"secp256k1\":\"A6/xRIwBfvDbU2TkJs4rgKexroILGVJkTRUDkDMcbUX8\"}},\"voting_power\":1},\"total_voting_power\":1}}},\"signer\":\"band1r74s7wg26uy4ewzqmm5m73u6j62sl4e38zpnws\"}" } func (suite *DecoderTestSuite) TestDecodeMsgConnectionOpenInit() { @@ -621,7 +688,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgConnectionOpenTry() { emitter.DecodeMsgConnectionOpenTry(msg, detail) suite.testCompareJson( detail, - "{\"client_id\":\"07-tendermint-0\",\"client_state\":{\"chain_id\":\"testchain0\",\"trust_level\":{\"numerator\":1,\"denominator\":3},\"trusting_period\":1209600000000000,\"unbonding_period\":1814400000000000,\"max_clock_drift\":10000000000,\"frozen_height\":{},\"latest_height\":{\"revision_height\":10},\"proof_specs\":[{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":33,\"min_prefix_length\":4,\"max_prefix_length\":12,\"hash\":1}},{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":32,\"min_prefix_length\":1,\"max_prefix_length\":1,\"hash\":1}}],\"upgrade_path\":[\"upgrade\",\"upgradedIBCState\"]},\"consensus_height\":{\"revision_height\":10,\"revision_number\":0},\"counterparty\":{\"client_id\":\"07-tendermint-0\",\"connection_id\":\"connection-0\",\"prefix\":{\"key_prefix\":\"c3RvcmVQcmVmaXhLZXk=\"}},\"counterparty_versions\":[{\"identifier\":\"1\",\"features\":[\"ORDER_ORDERED\",\"ORDER_UNORDERED\"]}],\"delay_period\":500,\"previous_connection_id\":\"\",\"proof_client\":\"\",\"proof_consensus\":\"\",\"proof_height\":{\"revision_height\":10,\"revision_number\":0},\"proof_init\":\"\",\"signer\":\"band12d5kwmn9wgqqqqqqqqqqqqqqqqqqqqqqr057wh\"}", + "{\"client_id\":\"07-tendermint-0\",\"client_state\":{\"chain_id\":\"testchain1-1\",\"trust_level\":{\"numerator\":1,\"denominator\":3},\"trusting_period\":1209600000000000,\"unbonding_period\":1814400000000000,\"max_clock_drift\":10000000000,\"frozen_height\":{},\"latest_height\":{\"revision_height\":10},\"proof_specs\":[{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":33,\"min_prefix_length\":4,\"max_prefix_length\":12,\"hash\":1}},{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":32,\"min_prefix_length\":1,\"max_prefix_length\":1,\"hash\":1}}],\"upgrade_path\":[\"upgrade\",\"upgradedIBCState\"]},\"consensus_height\":{\"revision_height\":10,\"revision_number\":0},\"counterparty\":{\"client_id\":\"07-tendermint-0\",\"connection_id\":\"connection-0\",\"prefix\":{\"key_prefix\":\"c3RvcmVQcmVmaXhLZXk=\"}},\"counterparty_versions\":[{\"identifier\":\"1\",\"features\":[\"ORDER_ORDERED\",\"ORDER_UNORDERED\"]}],\"delay_period\":500,\"previous_connection_id\":\"\",\"proof_client\":\"\",\"proof_consensus\":\"\",\"proof_height\":{\"revision_height\":10,\"revision_number\":0},\"proof_init\":\"\",\"signer\":\"band12d5kwmn9wgqqqqqqqqqqqqqqqqqqqqqqr057wh\"}", ) } @@ -653,7 +720,7 @@ func (suite *DecoderTestSuite) TestDecodeMsgConnectionOpenAck() { emitter.DecodeMsgConnectionOpenAck(msg, detail) suite.testCompareJson( detail, - "{\"client_state\":{\"chain_id\":\"testchain0\",\"trust_level\":{\"numerator\":1,\"denominator\":3},\"trusting_period\":1209600000000000,\"unbonding_period\":1814400000000000,\"max_clock_drift\":10000000000,\"frozen_height\":{},\"latest_height\":{\"revision_height\":10},\"proof_specs\":[{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":33,\"min_prefix_length\":4,\"max_prefix_length\":12,\"hash\":1}},{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":32,\"min_prefix_length\":1,\"max_prefix_length\":1,\"hash\":1}}],\"upgrade_path\":[\"upgrade\",\"upgradedIBCState\"]},\"connection_id\":\"\",\"consensus_height\":{\"revision_height\":10,\"revision_number\":0},\"counterparty_connection_id\":\"\",\"proof_client\":\"\",\"proof_consensus\":\"\",\"proof_height\":{\"revision_height\":10,\"revision_number\":0},\"proof_try\":\"\",\"signer\":\"band12d5kwmn9wgqqqqqqqqqqqqqqqqqqqqqqr057wh\",\"version\":{\"identifier\":\"1\",\"features\":[\"ORDER_ORDERED\",\"ORDER_UNORDERED\"]}}", + "{\"client_state\":{\"chain_id\":\"testchain1-1\",\"trust_level\":{\"numerator\":1,\"denominator\":3},\"trusting_period\":1209600000000000,\"unbonding_period\":1814400000000000,\"max_clock_drift\":10000000000,\"frozen_height\":{},\"latest_height\":{\"revision_height\":10},\"proof_specs\":[{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":33,\"min_prefix_length\":4,\"max_prefix_length\":12,\"hash\":1}},{\"leaf_spec\":{\"hash\":1,\"prehash_value\":1,\"length\":1,\"prefix\":\"AA==\"},\"inner_spec\":{\"child_order\":[0,1],\"child_size\":32,\"min_prefix_length\":1,\"max_prefix_length\":1,\"hash\":1}}],\"upgrade_path\":[\"upgrade\",\"upgradedIBCState\"]},\"connection_id\":\"\",\"consensus_height\":{\"revision_height\":10,\"revision_number\":0},\"counterparty_connection_id\":\"\",\"proof_client\":\"\",\"proof_consensus\":\"\",\"proof_height\":{\"revision_height\":10,\"revision_number\":0},\"proof_try\":\"\",\"signer\":\"band12d5kwmn9wgqqqqqqqqqqqqqqqqqqqqqqr057wh\",\"version\":{\"identifier\":\"1\",\"features\":[\"ORDER_ORDERED\",\"ORDER_UNORDERED\"]}}", ) } diff --git a/hooks/emitter/distribution.go b/hooks/emitter/distribution.go index f52a7b7f8..3c0af87bf 100644 --- a/hooks/emitter/distribution.go +++ b/hooks/emitter/distribution.go @@ -11,8 +11,8 @@ func (h *Hook) getCurrentRewardAndCurrentRatio(ctx sdk.Context, addr sdk.ValAddr currentReward := "0" currentRatio := "0" - reward := h.distrKeeper.GetValidatorCurrentRewards(ctx, addr) - latestReward := h.distrKeeper.GetValidatorHistoricalRewards(ctx, addr, reward.Period-1) + reward, _ := h.distrKeeper.GetValidatorCurrentRewards(ctx, addr) + latestReward, _ := h.distrKeeper.GetValidatorHistoricalRewards(ctx, addr, reward.Period-1) if !reward.Rewards.IsZero() { currentReward = reward.Rewards[0].Amount.String() @@ -26,7 +26,8 @@ func (h *Hook) getCurrentRewardAndCurrentRatio(ctx sdk.Context, addr sdk.ValAddr func (h *Hook) emitUpdateValidatorRewardAndAccumulatedCommission(ctx sdk.Context, addr sdk.ValAddress) { currentReward, currentRatio := h.getCurrentRewardAndCurrentRatio(ctx, addr) - accCommission, _ := h.distrKeeper.GetValidatorAccumulatedCommission(ctx, addr).Commission.TruncateDecimal() + valCommission, _ := h.distrKeeper.GetValidatorAccumulatedCommission(ctx, addr) + accCommission, _ := valCommission.Commission.TruncateDecimal() h.Write("UPDATE_VALIDATOR", common.JsDict{ "operator_address": addr.String(), "current_reward": currentReward, @@ -50,7 +51,7 @@ func (h *Hook) handleMsgWithdrawDelegatorReward( ) { valAddr, _ := sdk.ValAddressFromBech32(msg.ValidatorAddress) delAddr, _ := sdk.AccAddressFromBech32(msg.DelegatorAddress) - withdrawAddr := h.distrKeeper.GetDelegatorWithdrawAddr(ctx, delAddr) + withdrawAddr, _ := h.distrKeeper.GetDelegatorWithdrawAddr(ctx, delAddr) h.AddAccountsInTx(withdrawAddr.String()) h.emitUpdateValidatorReward(ctx, valAddr) h.emitDelegationAfterWithdrawReward(ctx, valAddr, withdrawAddr) @@ -73,7 +74,7 @@ func (h *Hook) handleMsgWithdrawValidatorCommission( ) { delAddr, _ := sdk.AccAddressFromBech32(msg.ValidatorAddress) valAddr, _ := sdk.ValAddressFromBech32(msg.ValidatorAddress) - withdrawAddr := h.distrKeeper.GetDelegatorWithdrawAddr(ctx, delAddr) + withdrawAddr, _ := h.distrKeeper.GetDelegatorWithdrawAddr(ctx, delAddr) h.AddAccountsInTx(withdrawAddr.String()) h.emitUpdateValidatorRewardAndAccumulatedCommission(ctx, valAddr) val, _ := h.stakingKeeper.GetValidator(ctx, valAddr) diff --git a/hooks/emitter/emitter.go b/hooks/emitter/emitter.go index cf60ebfd4..304b69cdb 100644 --- a/hooks/emitter/emitter.go +++ b/hooks/emitter/emitter.go @@ -11,11 +11,13 @@ import ( abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/crypto/tmhash" tmjson "github.com/cometbft/cometbft/libs/json" + types1 "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/x/authz" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -151,7 +153,7 @@ func (h *Hook) FlushMessages() { } // AfterInitChain specify actions need to do after chain initialization (app.Hook interface). -func (h *Hook) AfterInitChain(ctx sdk.Context, req abci.RequestInitChain, res abci.ResponseInitChain) { +func (h *Hook) AfterInitChain(ctx sdk.Context, req *abci.RequestInitChain, res *abci.ResponseInitChain) { var genesisState map[string]json.RawMessage if err := tmjson.Unmarshal(req.AppStateBytes, &genesisState); err != nil { panic(err) @@ -186,7 +188,7 @@ func (h *Hook) AfterInitChain(ctx sdk.Context, req abci.RequestInitChain, res ab var stakingState stakingtypes.GenesisState h.cdc.MustUnmarshalJSON(genesisState[stakingtypes.ModuleName], &stakingState) for _, val := range stakingState.Validators { - h.emitSetValidator(ctx, val.GetOperator()) + h.emitSetValidator(ctx, MustParseValAddress(val.GetOperator())) } for _, del := range stakingState.Delegations { @@ -317,7 +319,7 @@ func (h *Hook) AfterInitChain(ctx sdk.Context, req abci.RequestInitChain, res ab } // AfterBeginBlock specify actions need to do after begin block period (app.Hook interface). -func (h *Hook) AfterBeginBlock(ctx sdk.Context, req abci.RequestBeginBlock, res abci.ResponseBeginBlock) { +func (h *Hook) AfterBeginBlock(ctx sdk.Context, res sdk.BeginBlock) { h.accsInBlock = make(map[string]bool) h.accsInTx = make(map[string]bool) h.msgs = []common.Message{} @@ -326,15 +328,15 @@ func (h *Hook) AfterBeginBlock(ctx sdk.Context, req abci.RequestBeginBlock, res // h.emitStartState = false // h.emitNonHistoricalState(ctx) } else { - for _, val := range req.GetLastCommitInfo().Votes { - validator := h.stakingKeeper.ValidatorByConsAddr(ctx, val.GetValidator().Address) + for _, val := range ctx.VoteInfos() { + validator, _ := h.stakingKeeper.ValidatorByConsAddr(ctx, val.Validator.Address) conAddr, _ := validator.GetConsAddr() h.Write("NEW_VALIDATOR_VOTE", common.JsDict{ - "consensus_address": conAddr.String(), - "block_height": req.Header.GetHeight() - 1, - "voted": val.GetSignedLastBlock(), + "consensus_address": sdk.ConsAddress(conAddr).String(), + "block_height": ctx.BlockHeight() - 1, + "voted": val.BlockIdFlag == types1.BlockIDFlagCommit, }) - h.emitUpdateValidatorRewardAndAccumulatedCommission(ctx, validator.GetOperator()) + h.emitUpdateValidatorRewardAndAccumulatedCommission(ctx, MustParseValAddress(validator.GetOperator())) } } totalSupply := make([]string, 0) @@ -342,12 +344,14 @@ func (h *Hook) AfterBeginBlock(ctx sdk.Context, req abci.RequestBeginBlock, res totalSupply = append(totalSupply, coin.String()) return true }) + minter, _ := h.mintKeeper.Minter.Get(ctx) h.Write("NEW_BLOCK", common.JsDict{ - "height": req.Header.GetHeight(), + "height": ctx.BlockHeight(), "timestamp": ctx.BlockTime().UnixNano(), - "proposer": sdk.ConsAddress(req.Header.GetProposerAddress()).String(), - "hash": req.GetHash(), - "inflation": h.mintKeeper.GetMinter(ctx).Inflation.String(), + // "proposer": sdk.ConsAddress(req.Header.GetProposerAddress()).String(), + "proposer": sdk.ConsAddress(ctx.BlockHeader().ProposerAddress).String(), + "hash": ctx.HeaderHash(), + "inflation": minter.Inflation.String(), "supply": totalSupply, }) for _, event := range res.Events { @@ -361,10 +365,6 @@ func (h *Hook) AfterDeliverTx(ctx sdk.Context, tx sdk.Tx, res *abci.ExecTxResult return } h.accsInTx = make(map[string]bool) - tx, err := h.encodingConfig.TxConfig.TxDecoder()(req.Tx) - if err != nil { - return - } feeTx, ok := tx.(sdk.FeeTx) if !ok { return @@ -374,12 +374,20 @@ func (h *Hook) AfterDeliverTx(ctx sdk.Context, tx sdk.Tx, res *abci.ExecTxResult return } - txHash := tmhash.Sum(req.Tx) + sigTx, ok := tx.(authsigning.SigVerifiableTx) + if !ok { + return + } + + rawTx, _ := h.txConfig.TxEncoder()(tx) + txHash := tmhash.Sum(rawTx) var errMsg *string if !res.IsOK() { errMsg = &res.Log } + signers, _ := sigTx.GetSigners() + txDict := common.JsDict{ "hash": txHash, "block_height": ctx.BlockHeight(), @@ -387,7 +395,7 @@ func (h *Hook) AfterDeliverTx(ctx sdk.Context, tx sdk.Tx, res *abci.ExecTxResult "gas_limit": feeTx.GetGas(), "gas_fee": feeTx.GetFee().String(), "err_msg": errMsg, - "sender": tx.GetMsgs()[0].GetSigners()[0].String(), + "sender": sdk.AccAddress(signers[0]).String(), "success": res.IsOK(), "memo": memoTx.GetMemo(), "fee_payer": feeTx.FeeGranter(), @@ -408,10 +416,9 @@ func (h *Hook) AfterDeliverTx(ctx sdk.Context, tx sdk.Tx, res *abci.ExecTxResult "type": sdk.MsgTypeURL(msg), }) } - signers := tx.GetMsgs()[0].GetSigners() addrs := make([]string, len(signers)) for idx, signer := range signers { - addrs[idx] = signer.String() + addrs[idx] = sdk.AccAddress(signer).String() } h.AddAccountsInTx(addrs...) relatedAccounts := make([]string, 0, len(h.accsInBlock)) @@ -435,7 +442,7 @@ func (h *Hook) AfterEndBlock(ctx sdk.Context, res sdk.EndBlock) { prefix := []byte{groupkeeper.ProposalsByVotingPeriodEndPrefix} iterator := ctx.KVStore(h.groupStoreKey). - Iterator(prefix, sdk.PrefixEndBytes(append(append(prefix, lenTimeByte), timeBytes...))) + Iterator(prefix, storetypes.PrefixEndBytes(append(append(prefix, lenTimeByte), timeBytes...))) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { proposalID, _ := splitKeyWithTime(iterator.Key()) @@ -460,7 +467,7 @@ func (h *Hook) AfterEndBlock(ctx sdk.Context, res sdk.EndBlock) { } h.msgs = append(modifiedMsgs, h.msgs[1:]...) - h.Write("COMMIT", common.JsDict{"height": req.Height}) + h.Write("COMMIT", common.JsDict{"height": ctx.BlockHeight()}) } func (h *Hook) RequestSearch( diff --git a/hooks/emitter/gov.go b/hooks/emitter/gov.go index 21733279f..5271b548d 100644 --- a/hooks/emitter/gov.go +++ b/hooks/emitter/gov.go @@ -1,6 +1,8 @@ package emitter import ( + "cosmossdk.io/collections" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/gov/types" v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" @@ -16,7 +18,7 @@ var ( ) func (h *Hook) emitSetDeposit(ctx sdk.Context, txHash []byte, id uint64, depositor sdk.AccAddress) { - deposit, _ := h.govKeeper.GetDeposit(ctx, id, depositor) + deposit, _ := h.govKeeper.Deposits.Get(ctx, collections.Join(id, depositor)) h.Write("SET_DEPOSIT", common.JsDict{ "proposal_id": id, "depositor": depositor, @@ -26,7 +28,7 @@ func (h *Hook) emitSetDeposit(ctx sdk.Context, txHash []byte, id uint64, deposit } func (h *Hook) emitUpdateProposalAfterDeposit(ctx sdk.Context, id uint64) { - proposal, _ := h.govKeeper.GetProposal(ctx, id) + proposal, _ := h.govKeeper.Proposals.Get(ctx, id) h.Write("UPDATE_PROPOSAL", common.JsDict{ "id": id, "status": int(proposal.Status), @@ -85,7 +87,7 @@ func (h *Hook) handleMsgSubmitProposal( ctx sdk.Context, txHash []byte, msg *v1.MsgSubmitProposal, evMap common.EvMap, detail common.JsDict, ) { proposalId := uint64(common.Atoi(evMap[types.EventTypeSubmitProposal+"."+types.AttributeKeyProposalID][0])) - proposal, _ := h.govKeeper.GetProposal(ctx, proposalId) + proposal, _ := h.govKeeper.Proposals.Get(ctx, proposalId) subMsg := proposal.Messages[0].GetCachedValue() switch subMsg := subMsg.(type) { @@ -136,7 +138,7 @@ func (h *Hook) handleV1beta1MsgSubmitProposal( ctx sdk.Context, txHash []byte, msg *v1beta1.MsgSubmitProposal, evMap common.EvMap, detail common.JsDict, ) { proposalId := uint64(common.Atoi(evMap[types.EventTypeSubmitProposal+"."+types.AttributeKeyProposalID][0])) - proposal, _ := h.govKeeper.GetProposal(ctx, proposalId) + proposal, _ := h.govKeeper.Proposals.Get(ctx, proposalId) content := msg.GetContent() h.Write("NEW_PROPOSAL", common.JsDict{ @@ -166,7 +168,7 @@ func (h *Hook) handleMsgDeposit( depositor, _ := sdk.AccAddressFromBech32(msg.Depositor) h.emitSetDeposit(ctx, txHash, msg.ProposalId, depositor) h.emitUpdateProposalAfterDeposit(ctx, msg.ProposalId) - proposal, _ := h.govKeeper.GetProposal(ctx, msg.ProposalId) + proposal, _ := h.govKeeper.Proposals.Get(ctx, msg.ProposalId) detail["title"] = proposal.Title } @@ -178,7 +180,7 @@ func (h *Hook) handleV1beta1MsgDeposit( depositor, _ := sdk.AccAddressFromBech32(msg.Depositor) h.emitSetDeposit(ctx, txHash, msg.ProposalId, depositor) h.emitUpdateProposalAfterDeposit(ctx, msg.ProposalId) - proposal, _ := h.govKeeper.GetProposal(ctx, msg.ProposalId) + proposal, _ := h.govKeeper.Proposals.Get(ctx, msg.ProposalId) detail["title"] = proposal.Title } @@ -192,7 +194,7 @@ func (h *Hook) handleMsgVote( "tx_hash": txHash, } h.emitSetVoteWeighted(setVoteWeighted, v1.NewNonSplitVoteOption(msg.Option)) - proposal, _ := h.govKeeper.GetProposal(ctx, msg.ProposalId) + proposal, _ := h.govKeeper.Proposals.Get(ctx, msg.ProposalId) detail["title"] = proposal.Title } @@ -206,7 +208,7 @@ func (h *Hook) handleV1beta1MsgVote( "tx_hash": txHash, } h.emitV1beta1SetVoteWeighted(setVoteWeighted, v1beta1.NewNonSplitVoteOption(msg.Option)) - proposal, _ := h.govKeeper.GetProposal(ctx, msg.ProposalId) + proposal, _ := h.govKeeper.Proposals.Get(ctx, msg.ProposalId) detail["title"] = proposal.Title } @@ -220,7 +222,7 @@ func (h *Hook) handleMsgVoteWeighted( "tx_hash": txHash, } h.emitSetVoteWeighted(setVoteWeighted, msg.Options) - proposal, _ := h.govKeeper.GetProposal(ctx, msg.ProposalId) + proposal, _ := h.govKeeper.Proposals.Get(ctx, msg.ProposalId) detail["title"] = proposal.Title } @@ -234,7 +236,7 @@ func (h *Hook) handleV1beta1MsgVoteWeighted( "tx_hash": txHash, } h.emitV1beta1SetVoteWeighted(setVoteWeighted, msg.Options) - proposal, _ := h.govKeeper.GetProposal(ctx, msg.ProposalId) + proposal, _ := h.govKeeper.Proposals.Get(ctx, msg.ProposalId) detail["title"] = proposal.Title } @@ -247,11 +249,12 @@ func (h *Hook) handleEventInactiveProposal(evMap common.EvMap) { func (h *Hook) handleEventTypeActiveProposal(ctx sdk.Context, evMap common.EvMap) { id := uint64(common.Atoi(evMap[types.EventTypeActiveProposal+"."+types.AttributeKeyProposalID][0])) - proposal, _ := h.govKeeper.GetProposal(ctx, id) + proposal, _ := h.govKeeper.Proposals.Get(ctx, id) + totalBond, _ := h.stakingKeeper.TotalBondedTokens(ctx) h.Write("UPDATE_PROPOSAL", common.JsDict{ "id": id, "status": int(proposal.Status), - "total_bonded_tokens": h.stakingKeeper.TotalBondedTokens(ctx), + "total_bonded_tokens": totalBond, "yes_vote": proposal.FinalTallyResult.YesCount, "no_vote": proposal.FinalTallyResult.NoCount, "no_with_veto_vote": proposal.FinalTallyResult.NoWithVetoCount, diff --git a/hooks/emitter/oracle.go b/hooks/emitter/oracle.go index 6fe3e57be..4974628d7 100644 --- a/hooks/emitter/oracle.go +++ b/hooks/emitter/oracle.go @@ -1,10 +1,10 @@ package emitter import ( + "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/bandprotocol/chain/v3/hooks/common" - oraclekeeper "github.com/bandprotocol/chain/v3/x/oracle/keeper" "github.com/bandprotocol/chain/v3/x/oracle/types" ) @@ -60,9 +60,9 @@ func (h *Hook) emitRawRequestAndValRequest( for id, raw := range req.RawRequests { fee, err := sdk.ParseCoinNormalized(evMap[types.EventTypeRawRequest+"."+types.AttributeKeyFee][id]) if err != nil { - fee = sdk.NewCoin("uband", sdk.NewInt(0)) + fee = sdk.NewCoin("uband", math.NewInt(0)) } - fee.Amount = fee.Amount.Mul(sdk.NewInt(int64(len(req.RequestedValidators)))) + fee.Amount = fee.Amount.Mul(math.NewInt(int64(len(req.RequestedValidators)))) h.Write("NEW_RAW_REQUEST", common.JsDict{ "request_id": requestID, "external_id": raw.ExternalID, @@ -127,7 +127,7 @@ func (h *Hook) handleMsgRequestData( ) { var prepareGasUsed uint64 if eventRequestGasUsed, ok := evMap[types.EventTypeRequest+"."+types.AttributeKeyGasUsed]; ok { - prepareGasUsed = oraclekeeper.ConvertToGas(common.Atoui(eventRequestGasUsed[0])) + prepareGasUsed = ConvertToGas(common.Atoui(eventRequestGasUsed[0])) } id := types.RequestID(common.Atoi(evMap[types.EventTypeRequest+"."+types.AttributeKeyID][0])) @@ -222,7 +222,7 @@ func (h *Hook) handleMsgEditOracleScript( func (h *Hook) handleEventRequestExecute(ctx sdk.Context, evMap common.EvMap) { var executeGasUsed uint64 if eventResolveGasUsed, ok := evMap[types.EventTypeResolve+"."+types.AttributeKeyGasUsed]; ok { - executeGasUsed = oraclekeeper.ConvertToGas(common.Atoui(eventResolveGasUsed[0])) + executeGasUsed = ConvertToGas(common.Atoui(eventResolveGasUsed[0])) } if reasons, ok := evMap[types.EventTypeResolve+"."+types.AttributeKeyReason]; ok { diff --git a/hooks/emitter/staking.go b/hooks/emitter/staking.go index 3c499ff4b..10d7757d8 100644 --- a/hooks/emitter/staking.go +++ b/hooks/emitter/staking.go @@ -18,7 +18,8 @@ var ( func (h *Hook) emitSetValidator(ctx sdk.Context, addr sdk.ValAddress) types.Validator { val, _ := h.stakingKeeper.GetValidator(ctx, addr) currentReward, currentRatio := h.getCurrentRewardAndCurrentRatio(ctx, addr) - accCommission, _ := h.distrKeeper.GetValidatorAccumulatedCommission(ctx, addr).Commission.TruncateDecimal() + valAccComm, _ := h.distrKeeper.GetValidatorAccumulatedCommission(ctx, addr) + accCommission, _ := valAccComm.Commission.TruncateDecimal() pub, _ := val.ConsPubKey() h.Write("SET_VALIDATOR", common.JsDict{ @@ -46,8 +47,9 @@ func (h *Hook) emitSetValidator(ctx sdk.Context, addr sdk.ValAddress) types.Vali } func (h *Hook) emitUpdateValidator(ctx sdk.Context, addr sdk.ValAddress) (types.Validator, bool) { - val, found := h.stakingKeeper.GetValidator(ctx, addr) - if !found { + val, err := h.stakingKeeper.GetValidator(ctx, addr) + // TODO: Check this correct logic + if err != nil { h.Write("UPDATE_VALIDATOR", common.JsDict{ "operator_address": addr.String(), "tokens": 0, @@ -94,19 +96,19 @@ func (h *Hook) emitDelegationAfterWithdrawReward( } func (h *Hook) emitDelegation(ctx sdk.Context, operatorAddress sdk.ValAddress, delegatorAddress sdk.AccAddress) { - delegation, found := h.stakingKeeper.GetDelegation(ctx, delegatorAddress, operatorAddress) - if found { - _, ratio := h.getCurrentRewardAndCurrentRatio(ctx, operatorAddress) - h.Write("SET_DELEGATION", common.JsDict{ + delegation, err := h.stakingKeeper.GetDelegation(ctx, delegatorAddress, operatorAddress) + if err != nil { + h.Write("REMOVE_DELEGATION", common.JsDict{ "delegator_address": delegatorAddress, "operator_address": operatorAddress, - "shares": delegation.Shares.String(), - "last_ratio": ratio, }) } else { - h.Write("REMOVE_DELEGATION", common.JsDict{ + _, ratio := h.getCurrentRewardAndCurrentRatio(ctx, operatorAddress) + h.Write("SET_DELEGATION", common.JsDict{ "delegator_address": delegatorAddress, "operator_address": operatorAddress, + "shares": delegation.Shares.String(), + "last_ratio": ratio, }) } } diff --git a/hooks/emitter/utils.go b/hooks/emitter/utils.go new file mode 100644 index 000000000..6d9af6079 --- /dev/null +++ b/hooks/emitter/utils.go @@ -0,0 +1,20 @@ +package emitter + +import ( + "math" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func ConvertToGas(owasm uint64) uint64 { + // TODO: Using `gasConversionFactor` from oracle module + return uint64(math.Ceil(float64(owasm) / float64(20_000_000))) +} + +func MustParseValAddress(addr string) sdk.ValAddress { + val, err := sdk.ValAddressFromBech32(addr) + if err != nil { + panic(err) + } + return val +} diff --git a/x/oracle/keeper/grpc_query.go b/x/oracle/keeper/grpc_query.go index 1a1d12aa6..1f68c1b6e 100644 --- a/x/oracle/keeper/grpc_query.go +++ b/x/oracle/keeper/grpc_query.go @@ -15,6 +15,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/authz" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/bandprotocol/chain/v3/hooks/common" "github.com/bandprotocol/chain/v3/x/oracle/types" ) diff --git a/x/oracle/keeper/owasm.go b/x/oracle/keeper/owasm.go index 82f8e83f3..f788cca09 100644 --- a/x/oracle/keeper/owasm.go +++ b/x/oracle/keeper/owasm.go @@ -3,7 +3,6 @@ package keeper import ( "encoding/hex" "fmt" - "math" "cosmossdk.io/math" @@ -21,10 +20,6 @@ func ConvertToOwasmGas(cosmos uint64) uint64 { return cosmos * gasConversionFactor } -func ConvertToGas(owasm uint64) uint64 { - return uint64(math.Ceil(float64(owasm) / float64(gasConversionFactor))) -} - // GetSpanSize return maximum value between MaxReportDataSize and MaxCallDataSize func (k Keeper) GetSpanSize(ctx sdk.Context) uint64 { params := k.GetParams(ctx) diff --git a/x/oracle/module.go b/x/oracle/module.go index 50b363430..182bc4a11 100644 --- a/x/oracle/module.go +++ b/x/oracle/module.go @@ -17,6 +17,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" + "github.com/bandprotocol/chain/v3/hooks/common" "github.com/bandprotocol/chain/v3/x/oracle/client/cli" "github.com/bandprotocol/chain/v3/x/oracle/exported" "github.com/bandprotocol/chain/v3/x/oracle/keeper"