Skip to content

Commit

Permalink
feat: Separate relaying price data and relaying price data with a con…
Browse files Browse the repository at this point in the history
…tract call into seperate cli commands (#332)
  • Loading branch information
rbajollari authored Dec 12, 2023
1 parent 5e64fa5 commit 71f1f9c
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 12 deletions.
87 changes: 84 additions & 3 deletions x/gmp/client/cli/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,99 @@ func GetTxCmd() *cobra.Command {

cmd.AddCommand(
GetCmdRelay(),
GetCmdRelayWithContractCall(),
)

return cmd
}

func GetCmdRelay() *cobra.Command {
cmd := &cobra.Command{
Use: `relay [destination-chain] [ojo-contract-address] [client-contract-address] ` +
Use: `relay [destination-chain] [ojo-contract-address] [timestamp] [denoms] [amount]`,
Args: cobra.ExactArgs(5),
Short: "Relay oracle data via Axelar GMP",
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
return err
}

if args[0] == "" {
return fmt.Errorf("destination-chain cannot be empty")
}
if args[1] == "" {
return fmt.Errorf("ojo-contract-address cannot be empty")
}
if args[2] == "" {
return fmt.Errorf("timestamp cannot be empty")
}
if args[3] == "" {
return fmt.Errorf("denoms cannot be empty")
}

tokens := sdk.Coin{}
// normalize the coin denom
if args[4] != "" {
coin, err := sdk.ParseCoinNormalized(args[7])
if err != nil {
return err
}
if !strings.HasPrefix(coin.Denom, "ibc/") {
denomTrace := ibctransfertypes.ParseDenomTrace(coin.Denom)
coin.Denom = denomTrace.IBCDenom()
}
tokens = coin
}

// convert denoms to string array
denoms := strings.Split(args[3], ",")

// convert timestamp string to int64
timestamp, err := strconv.ParseInt(args[2], 10, 64)
if err != nil {
return err
}

commandSelector, err := base64.StdEncoding.DecodeString("")
if err != nil {
return err
}
commandParams, err := base64.StdEncoding.DecodeString("")
if err != nil {
return err
}

msg := types.NewMsgRelay(
clientCtx.GetFromAddress().String(),
args[0], // destination-chain e.g. "Ethereum"
args[1], // ojo-contract-address e.g. "0x001"
args[2], // customer-contract-address e.g. "0x002"
tokens, // amount
denoms, // denoms
commandSelector, // command-selector
commandParams, // command-params
timestamp, // timestamp
)
err = msg.ValidateBasic()
if err != nil {
return err
}

return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
},
}

flags.AddTxFlagsToCmd(cmd)

return cmd
}

func GetCmdRelayWithContractCall() *cobra.Command {
cmd := &cobra.Command{
Use: `relay-with-contract-call [destination-chain] [ojo-contract-address] [client-contract-address] ` +
`[command-selector] [command-params] [timestamp] [denoms] [amount]`,
Args: cobra.ExactArgs(8),
Short: "Relay oracle data via Axelar GMP",
Short: "Relay oracle data via Axelar GMP and call contract method with oracle data",
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
Expand Down Expand Up @@ -67,7 +149,6 @@ func GetCmdRelay() *cobra.Command {

tokens := sdk.Coin{}
// normalize the coin denom
fmt.Println(args[7])
if args[7] != "" {
coin, err := sdk.ParseCoinNormalized(args[7])
if err != nil {
Expand Down
6 changes: 0 additions & 6 deletions x/gmp/types/msgs.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,6 @@ func (msg MsgRelayPrice) GetSigners() []sdk.AccAddress {

// ValidateBasic Implements sdk.Msg
func (msg MsgRelayPrice) ValidateBasic() error {
if len(msg.CommandParams) == 0 {
return fmt.Errorf("commandParams cannot be empty")
}
if len(msg.CommandSelector) != 4 {
return fmt.Errorf("commandSelector length must be 4")
}
if len(msg.Denoms) == 0 {
return fmt.Errorf("denoms cannot be empty")
}
Expand Down
3 changes: 0 additions & 3 deletions x/gmp/types/msgs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,4 @@ func TestMsgRelayPriceValidateBasic(t *testing.T) {
)
err = price.ValidateBasic()
require.NoError(t, err)
price.CommandSelector = []byte("12345")
err = price.ValidateBasic()
require.Error(t, err)
}

0 comments on commit 71f1f9c

Please sign in to comment.