From 06a26adf8c3b725f6ff3ffc2e819fe7012882b74 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Wed, 6 Mar 2024 17:13:30 -0600 Subject: [PATCH 1/4] local-ic interact --- local-interchain/cmd/local-ic/interaction.go | 71 ++++++++++++++++++++ local-interchain/cmd/local-ic/main.go | 1 + 2 files changed, 72 insertions(+) create mode 100644 local-interchain/cmd/local-ic/interaction.go diff --git a/local-interchain/cmd/local-ic/interaction.go b/local-interchain/cmd/local-ic/interaction.go new file mode 100644 index 000000000..688db7895 --- /dev/null +++ b/local-interchain/cmd/local-ic/interaction.go @@ -0,0 +1,71 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "strings" + + "github.com/spf13/cobra" + "github.com/strangelove-ventures/localinterchain/interchain/handlers" +) + +const apiEndpoint = "http://127.0.0.1:8080" + +// old: +// +// curl -X POST -H "Content-Type: application/json" -d '{ +// "chain_id": "localjuno-1", +// "action": "query", +// "cmd": "bank balances juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl" +// }' http://127.0.0.1:8080/ +// +// new: +// local-ic interact localjuno-1 bin 'status --node=%RPC%' +// local-ic interact localjuno-1 query bank balances juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl +var interactCmd = &cobra.Command{ + Use: "interact [chain_id] [interaction] [arguments...]", + Short: "Interact with a node", + Args: cobra.MinimumNArgs(3), + ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return GetFiles(), cobra.ShellCompDirectiveNoFileComp + }, + Run: func(cmd *cobra.Command, args []string) { + ah := handlers.ActionHandler{ + ChainId: args[0], + Action: args[1], + Cmd: strings.Join(args[2:], " "), + } + + res := makeHttpReq(ah) + fmt.Println(res) + }, +} + +func makeHttpReq(ah handlers.ActionHandler) string { + client := &http.Client{} + + jsonData, err := json.Marshal(ah) + if err != nil { + panic(err) + } + + req, err := http.NewRequest("POST", apiEndpoint, bytes.NewReader(jsonData)) + if err != nil { + panic(err) + } + req.Header.Set("Content-Type", "application/json") + resp, err := client.Do(req) + if err != nil { + panic(err) + } + defer resp.Body.Close() + bodyText, err := io.ReadAll(resp.Body) + if err != nil { + panic(err) + } + + return string(bodyText) +} diff --git a/local-interchain/cmd/local-ic/main.go b/local-interchain/cmd/local-ic/main.go index a78af4c51..4a1ee8b63 100644 --- a/local-interchain/cmd/local-ic/main.go +++ b/local-interchain/cmd/local-ic/main.go @@ -9,6 +9,7 @@ func main() { rootCmd.AddCommand(chainsCmd) rootCmd.AddCommand(newChainCmd) rootCmd.AddCommand(startCmd) + rootCmd.AddCommand(interactCmd) if err := rootCmd.Execute(); err != nil { fmt.Fprintf(os.Stderr, "error while executing your CLI. Err: %v\n", err) From c8b6309721b61ac193703bc6178d845faa49fb5c Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Wed, 6 Mar 2024 17:20:09 -0600 Subject: [PATCH 2/4] use flag for API addr --- local-interchain/cmd/local-ic/interaction.go | 21 ++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/local-interchain/cmd/local-ic/interaction.go b/local-interchain/cmd/local-ic/interaction.go index 688db7895..5638a11b1 100644 --- a/local-interchain/cmd/local-ic/interaction.go +++ b/local-interchain/cmd/local-ic/interaction.go @@ -12,7 +12,9 @@ import ( "github.com/strangelove-ventures/localinterchain/interchain/handlers" ) -const apiEndpoint = "http://127.0.0.1:8080" +const ( + FlagAPIEndpoint = "api-address" +) // old: // @@ -26,9 +28,10 @@ const apiEndpoint = "http://127.0.0.1:8080" // local-ic interact localjuno-1 bin 'status --node=%RPC%' // local-ic interact localjuno-1 query bank balances juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl var interactCmd = &cobra.Command{ - Use: "interact [chain_id] [interaction] [arguments...]", - Short: "Interact with a node", - Args: cobra.MinimumNArgs(3), + Use: "interact [chain_id] [interaction] [arguments...]", + Short: "Interact with a node", + Args: cobra.MinimumNArgs(3), + Aliases: []string{"i"}, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return GetFiles(), cobra.ShellCompDirectiveNoFileComp }, @@ -39,12 +42,18 @@ var interactCmd = &cobra.Command{ Cmd: strings.Join(args[2:], " "), } - res := makeHttpReq(ah) + apiAddr, _ := cmd.Flags().GetString(FlagAPIAddressOverride) + + res := makeHttpReq(apiAddr, ah) fmt.Println(res) }, } -func makeHttpReq(ah handlers.ActionHandler) string { +func init() { + interactCmd.Flags().String(FlagAPIAddressOverride, "http://127.0.0.1:8080", "override the default API address") +} + +func makeHttpReq(apiEndpoint string, ah handlers.ActionHandler) string { client := &http.Client{} jsonData, err := json.Marshal(ah) From af24e0ea7b1e0be15725a23ccd5f7b341b9f194c Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Thu, 7 Mar 2024 10:05:29 -0600 Subject: [PATCH 3/4] faster blocks --- local-interchain/chains/base_ibc.json | 4 ++-- local-interchain/chains/cosmoshub.json | 18 +++++++++--------- local-interchain/chains/juno_ibc.json | 16 ++++++++-------- local-interchain/chains/stargaze.json | 16 ++++++++-------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/local-interchain/chains/base_ibc.json b/local-interchain/chains/base_ibc.json index 22bcd15cc..9c03a3a76 100644 --- a/local-interchain/chains/base_ibc.json +++ b/local-interchain/chains/base_ibc.json @@ -9,7 +9,7 @@ "docker_image": { "version": "v9.1.0" }, - "block_time": "6s", + "block_time": "2s", "gas_prices": "0%DENOM%", "gas_adjustment": 2.0, "ibc_paths": ["atom-juno", "atom-terra"], @@ -49,7 +49,7 @@ "docker_image": { "version": "v2.3.4" }, - "block_time": "6s", + "block_time": "2s", "encoding-options": ["wasm"], "gas_prices": "0%DENOM%", "gas_adjustment": 2.0, diff --git a/local-interchain/chains/cosmoshub.json b/local-interchain/chains/cosmoshub.json index 23edf037b..a402ec225 100644 --- a/local-interchain/chains/cosmoshub.json +++ b/local-interchain/chains/cosmoshub.json @@ -1,23 +1,23 @@ -{ +{ "chains": [ { - "name": "gaia", + "name": "gaia", "chain_id": "localcosmos-1", "denom": "uatom", "binary": "gaiad", "bech32_prefix": "cosmos", - "docker_image": { + "docker_image": { "version": "v10.0.1" - }, + }, "gas_prices": "0%DENOM%", "chain_type": "cosmos", "coin_type": 118, "trusting_period": "112h", "gas_adjustment": 2.0, "number_vals": 1, - "number_node": 0, + "number_node": 0, "debugging": true, - "block_time": "500ms", + "block_time": "500ms", "genesis": { "modify": [ { @@ -32,15 +32,15 @@ "key": "app_state.gov.deposit_params.min_deposit.0.denom", "value": "uatom" } - ], + ], "accounts": [ { "name": "acc0", - "address": "cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr", + "address": "cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr", "amount": "10000000000%DENOM%", "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" } - ] + ] } } ] diff --git a/local-interchain/chains/juno_ibc.json b/local-interchain/chains/juno_ibc.json index f22cdaddc..b991b5844 100644 --- a/local-interchain/chains/juno_ibc.json +++ b/local-interchain/chains/juno_ibc.json @@ -1,7 +1,7 @@ -{ +{ "chains": [ { - "name": "juno", + "name": "juno", "chain_id": "localjuno-1", "denom": "ujuno", "binary": "junod", @@ -19,7 +19,7 @@ "number_node": 0, "block_time": "500ms", "ibc_paths": ["juno-ibc-1"], - "debugging": true, + "debugging": true, "encoding-options": ["juno"], "genesis": { "modify": [ @@ -35,7 +35,7 @@ "key": "app_state.gov.params.min_deposit.0.denom", "value": "ujuno" } - ], + ], "accounts": [ { "name": "acc0", @@ -49,7 +49,7 @@ "amount": "10000000%DENOM%", "mnemonic": "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" } - ] + ] } }, { @@ -62,7 +62,7 @@ "repository": "ghcr.io/cosmoscontracts/juno", "version": "v17.0.0" }, - "genesis": { + "genesis": { "accounts": [ { "name": "second0", @@ -76,13 +76,13 @@ "amount": "10000000%DENOM%", "mnemonic": "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" } - ] + ] }, "block_time": "500ms", "encoding-options": ["juno"], "gas_prices": "0%DENOM%", "gas_adjustment": 2.0, - "ibc_paths": ["juno-ibc-1"] + "ibc_paths": ["juno-ibc-1"] } ] } \ No newline at end of file diff --git a/local-interchain/chains/stargaze.json b/local-interchain/chains/stargaze.json index 331372f82..dda204fc2 100644 --- a/local-interchain/chains/stargaze.json +++ b/local-interchain/chains/stargaze.json @@ -1,21 +1,21 @@ -{ +{ "chains": [ { - "name": "stargaze", + "name": "stargaze", "chain_id": "localstars-1", "denom": "ustars", "binary": "starsd", "bech32_prefix": "stars", - "docker_image": { + "docker_image": { "version": "v10.0.1" - }, + }, "gas_prices": "0%DENOM%", "chain_type": "cosmos", "coin_type": 118, "trusting_period": "112h", "gas_adjustment": 2.0, "number_vals": 1, - "number_node": 0, + "number_node": 0, "debugging": true, "block_time": "500ms", "encoding-options": ["wasm"], @@ -33,15 +33,15 @@ "key": "app_state.gov.deposit_params.min_deposit.0.denom", "value": "ustars" } - ], + ], "accounts": [ { "name": "acc0", - "address": "stars1hj5fveer5cjtn4wd6wstzugjfdxzl0xpjs908j", + "address": "stars1hj5fveer5cjtn4wd6wstzugjfdxzl0xpjs908j", "amount": "10000000000%DENOM%", "mnemonic": "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" } - ] + ] } } ] From f639cf83fe6b95af0674ec5d888ca2f3f0588211 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Thu, 7 Mar 2024 10:06:11 -0600 Subject: [PATCH 4/4] interact examples --- local-interchain/cmd/local-ic/interaction.go | 43 +++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/local-interchain/cmd/local-ic/interaction.go b/local-interchain/cmd/local-ic/interaction.go index 5638a11b1..547bc3cb7 100644 --- a/local-interchain/cmd/local-ic/interaction.go +++ b/local-interchain/cmd/local-ic/interaction.go @@ -13,33 +13,35 @@ import ( ) const ( - FlagAPIEndpoint = "api-address" + FlagAPIEndpoint = "api-endpoint" ) -// old: -// -// curl -X POST -H "Content-Type: application/json" -d '{ -// "chain_id": "localjuno-1", -// "action": "query", -// "cmd": "bank balances juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl" -// }' http://127.0.0.1:8080/ -// -// new: -// local-ic interact localjuno-1 bin 'status --node=%RPC%' -// local-ic interact localjuno-1 query bank balances juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl +func init() { + interactCmd.Flags().String(FlagAPIAddressOverride, "http://127.0.0.1:8080", "override the default API address") +} + var interactCmd = &cobra.Command{ - Use: "interact [chain_id] [interaction] [arguments...]", - Short: "Interact with a node", - Args: cobra.MinimumNArgs(3), + Use: "interact [chain_id] [interaction] [arguments...]", + Short: "Interact with a node", + Example: `local-ic interact localcosmos-1 bin 'status --node=%RPC%' --api-endpoint=http://127.0.0.1:8080 +local-ic interact localcosmos-1 query bank balances cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr +local-ic interact localcosmos-1 get_channels +local-ic interact localcosmos-1 relayer-exec rly q channels localcosmos-1 +`, + Args: cobra.MinimumNArgs(2), Aliases: []string{"i"}, ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return GetFiles(), cobra.ShellCompDirectiveNoFileComp }, Run: func(cmd *cobra.Command, args []string) { + ah := handlers.ActionHandler{ ChainId: args[0], Action: args[1], - Cmd: strings.Join(args[2:], " "), + } + + if len(args) > 2 { + ah.Cmd = strings.Join(args[2:], " ") } apiAddr, _ := cmd.Flags().GetString(FlagAPIAddressOverride) @@ -49,13 +51,14 @@ var interactCmd = &cobra.Command{ }, } -func init() { - interactCmd.Flags().String(FlagAPIAddressOverride, "http://127.0.0.1:8080", "override the default API address") -} - func makeHttpReq(apiEndpoint string, ah handlers.ActionHandler) string { client := &http.Client{} + // curl -X POST -H "Content-Type: application/json" -d '{ + // "chain_id": "localjuno-1", + // "action": "query", + // "cmd": "bank balances juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl" + // }' http://127.0.0.1:8080/ jsonData, err := json.Marshal(ah) if err != nil { panic(err)