Skip to content

Commit 5de0aa7

Browse files
authored
feat: advanced options for relayer configure command (#767)
* Make channel configurable * Advanced questions * lint * Update gomod * Relay acknowledgement * Flag option for relayer configuration * One little change
1 parent ed03f79 commit 5de0aa7

File tree

6 files changed

+312
-74
lines changed

6 files changed

+312
-74
lines changed

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ require (
4646
github.com/stretchr/testify v1.7.0
4747
github.com/tendermint/spn v0.0.0-20201215081711-b9ec9286ed83
4848
github.com/tendermint/tendermint v0.34.3
49-
golang.org/x/crypto v0.0.0-20210218145215-b8e89b74b9df // indirect
49+
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 // indirect
5050
golang.org/x/mod v0.4.1
5151
golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect
52-
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a
53-
golang.org/x/sys v0.0.0-20210218155724-8ebf48af031b // indirect
54-
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf // indirect
52+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
53+
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43 // indirect
54+
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d // indirect
5555
google.golang.org/grpc v1.35.0
5656
)
5757

go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -871,8 +871,8 @@ golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPh
871871
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
872872
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
873873
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
874-
golang.org/x/crypto v0.0.0-20210218145215-b8e89b74b9df h1:y7QZzfUiTwWam+xBn29Ulb8CBwVN5UdzmMDavl9Whlw=
875-
golang.org/x/crypto v0.0.0-20210218145215-b8e89b74b9df/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
874+
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g=
875+
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
876876
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
877877
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
878878
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -947,8 +947,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
947947
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
948948
golang.org/x/sync v0.0.0-20201008141435-b3e1573b7520/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
949949
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
950-
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs=
951-
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
950+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
951+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
952952
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
953953
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
954954
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1002,12 +1002,12 @@ golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7w
10021002
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
10031003
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
10041004
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1005-
golang.org/x/sys v0.0.0-20210218155724-8ebf48af031b h1:lAZ0/chPUDWwjqosYR0X4M490zQhMsiJ4K3DbA7o+3g=
1006-
golang.org/x/sys v0.0.0-20210218155724-8ebf48af031b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1005+
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43 h1:SgQ6LNaYJU0JIuEHv9+s6EbhSCwYeAf5Yvj6lpYlqAE=
1006+
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
10071007
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
10081008
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
1009-
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M=
1010-
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
1009+
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
1010+
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
10111011
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
10121012
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
10131013
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=

starport/interface/cli/starport/cmd/relayer_configure.go

Lines changed: 206 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,17 @@ import (
1313
)
1414

1515
const (
16+
advancedFlag = "advanced"
17+
sourceRPCFlag = "source-rpc"
18+
targetRPCFlag = "target-rpc"
19+
sourceFaucetFlag = "source-faucet"
20+
targetFaucetFlag = "target-faucet"
21+
sourcePortFlag = "source-port"
22+
sourceVersionFlag = "source-version"
23+
targetPortFlag = "target-port"
24+
targetVersionFlag = "target-version"
25+
orderedFlag = "ordered"
26+
1627
relayerSource = "source"
1728
relayerTarget = "target"
1829

@@ -30,6 +41,17 @@ func NewRelayerConfigure() *cobra.Command {
3041
Aliases: []string{"conf"},
3142
RunE: relayerConfigureHandler,
3243
}
44+
c.Flags().BoolP(advancedFlag, "a", false, "Advanced configuration options for custom IBC modules")
45+
c.Flags().String(sourceRPCFlag, "", "RPC address of the source chain")
46+
c.Flags().String(targetRPCFlag, "", "RPC address of the target chain")
47+
c.Flags().String(sourceFaucetFlag, "", "Faucet address of the source chain")
48+
c.Flags().String(targetFaucetFlag, "", "Faucet address of the target chain")
49+
c.Flags().String(sourcePortFlag, "", "IBC port ID on the source chain")
50+
c.Flags().String(sourceVersionFlag, "", "Module version on the source chain")
51+
c.Flags().String(targetPortFlag, "", "IBC port ID on the target chain")
52+
c.Flags().String(targetVersionFlag, "", "Module version on the target chain")
53+
c.Flags().Bool(orderedFlag, false, "Set the channel as ordered")
54+
3355
return c
3456
}
3557

@@ -39,93 +61,183 @@ func relayerConfigureHandler(cmd *cobra.Command, args []string) error {
3961

4062
printSection("Setting up chains")
4163

64+
// basic configuration
4265
var (
4366
sourceRPCAddress string
4467
targetRPCAddress string
4568
sourceFaucetAddress string
4669
targetFaucetAddress string
4770
)
4871

49-
if err := cliquiz.Ask(
50-
cliquiz.NewQuestion("Source RPC",
72+
// advanced configuration for the channel
73+
var (
74+
sourcePort string
75+
sourceVersion string
76+
targetPort string
77+
targetVersion string
78+
)
79+
80+
// questions
81+
var (
82+
questionSourceRPCAddress = cliquiz.NewQuestion(
83+
"Source RPC",
5184
&sourceRPCAddress,
5285
cliquiz.DefaultAnswer(defaultSourceRPCAddress),
5386
cliquiz.Required(),
54-
),
55-
cliquiz.NewQuestion("Source Faucet",
87+
)
88+
questionSourceFaucet = cliquiz.NewQuestion(
89+
"Source Faucet",
5690
&sourceFaucetAddress,
57-
),
58-
cliquiz.NewQuestion("Target RPC",
91+
)
92+
questionTargetRPCAddress = cliquiz.NewQuestion(
93+
"Target RPC",
5994
&targetRPCAddress,
6095
cliquiz.DefaultAnswer(defaultTargetRPCAddress),
6196
cliquiz.Required(),
62-
),
63-
cliquiz.NewQuestion("Target Faucet",
97+
)
98+
questionTargetFaucet = cliquiz.NewQuestion(
99+
"Target Faucet",
64100
&targetFaucetAddress,
65-
),
66-
); err != nil {
101+
)
102+
questionSourcePort = cliquiz.NewQuestion(
103+
"Source Port",
104+
&sourcePort,
105+
cliquiz.DefaultAnswer(xrelayer.TransferPort),
106+
cliquiz.Required(),
107+
)
108+
questionSourceVersion = cliquiz.NewQuestion(
109+
"Source Version",
110+
&sourceVersion,
111+
cliquiz.DefaultAnswer(xrelayer.TransferVersion),
112+
cliquiz.Required(),
113+
)
114+
questionTargetPort = cliquiz.NewQuestion(
115+
"Target Port",
116+
&targetPort,
117+
cliquiz.DefaultAnswer(xrelayer.TransferPort),
118+
cliquiz.Required(),
119+
)
120+
questionTargetVersion = cliquiz.NewQuestion(
121+
"Target Version",
122+
&targetVersion,
123+
cliquiz.DefaultAnswer(xrelayer.TransferVersion),
124+
cliquiz.Required(),
125+
)
126+
)
127+
128+
// Get flags
129+
advanced, err := cmd.Flags().GetBool(advancedFlag)
130+
if err != nil {
131+
return err
132+
}
133+
sourceRPCAddress, err = cmd.Flags().GetString(sourceRPCFlag)
134+
if err != nil {
135+
return err
136+
}
137+
sourceFaucetAddress, err = cmd.Flags().GetString(sourceFaucetFlag)
138+
if err != nil {
139+
return err
140+
}
141+
targetRPCAddress, err = cmd.Flags().GetString(targetRPCFlag)
142+
if err != nil {
143+
return err
144+
}
145+
targetFaucetAddress, err = cmd.Flags().GetString(targetFaucetFlag)
146+
if err != nil {
147+
return err
148+
}
149+
sourcePort, err = cmd.Flags().GetString(sourcePortFlag)
150+
if err != nil {
151+
return err
152+
}
153+
sourceVersion, err = cmd.Flags().GetString(sourceVersionFlag)
154+
if err != nil {
155+
return err
156+
}
157+
targetPort, err = cmd.Flags().GetString(targetPortFlag)
158+
if err != nil {
159+
return err
160+
}
161+
targetVersion, err = cmd.Flags().GetString(targetVersionFlag)
162+
if err != nil {
163+
return err
164+
}
165+
ordered, err := cmd.Flags().GetBool(orderedFlag)
166+
if err != nil {
67167
return err
68168
}
69169

70-
fmt.Println()
71-
s.SetText("Fetching chain info...")
170+
var questions []cliquiz.Question
72171

73-
init := func(name, rpcAddr, faucetAddr string) (*xrelayer.Chain, error) {
74-
defer s.Stop()
75-
s.SetText("Initializing chain...").Start()
172+
// get information from prompt if flag not provided
173+
if sourceRPCAddress == "" {
174+
questions = append(questions, questionSourceRPCAddress)
175+
}
176+
if sourceFaucetAddress == "" {
177+
questions = append(questions, questionSourceFaucet)
178+
}
179+
if targetRPCAddress == "" {
180+
questions = append(questions, questionTargetRPCAddress)
181+
}
182+
if targetFaucetAddress == "" {
183+
questions = append(questions, questionTargetFaucet)
184+
}
76185

77-
c, err := xrelayer.NewChain(cmd.Context(), rpcAddr, xrelayer.WithFaucet(faucetAddr))
78-
if err != nil {
79-
return nil, errors.Wrapf(err, "cannot resolve %s", name)
186+
// advanced information
187+
if advanced {
188+
if sourcePort == "" {
189+
questions = append(questions, questionSourcePort)
80190
}
81-
82-
account, err := c.Account(cmd.Context())
83-
if err != nil {
84-
return nil, err
191+
if sourceVersion == "" {
192+
questions = append(questions, questionSourceVersion)
85193
}
86-
87-
s.Stop()
88-
89-
fmt.Printf("🔐 Account on %q is %q\n \n", name, account.Address)
90-
s.
91-
SetCharset(spinner.CharSets[9]).
92-
SetColor("white").
93-
SetPrefix(" |·").
94-
SetText(color.Yellow.Sprintf("trying to receive tokens from a faucet...")).
95-
Start()
96-
97-
err = c.TryFaucet(cmd.Context())
98-
s.Stop()
99-
100-
fmt.Print(" |· ")
101-
if err != nil {
102-
fmt.Println(color.Yellow.Sprintf(err.Error()))
103-
} else {
104-
fmt.Println(color.Green.Sprintf("received coins from a faucet"))
194+
if targetPort == "" {
195+
questions = append(questions, questionTargetPort)
105196
}
106-
107-
coins, err := c.Balance(cmd.Context())
108-
if err != nil {
109-
return nil, err
197+
if targetVersion == "" {
198+
questions = append(questions, questionTargetVersion)
110199
}
111-
fmt.Printf(" |· (balance: %s)\n\n", coins)
200+
}
112201

113-
return c, nil
202+
if len(questions) > 0 {
203+
if err := cliquiz.Ask(questions...); err != nil {
204+
return err
205+
}
114206
}
115207

116-
sourceChain, err := init(relayerSource, sourceRPCAddress, sourceFaucetAddress)
208+
fmt.Println()
209+
s.SetText("Fetching chain info...")
210+
211+
// initialize the chains
212+
sourceChain, err := initChain(cmd, s, relayerSource, sourceRPCAddress, sourceFaucetAddress)
117213
if err != nil {
118214
return err
119215
}
120216

121-
targetChain, err := init(relayerTarget, targetRPCAddress, targetFaucetAddress)
217+
targetChain, err := initChain(cmd, s, relayerTarget, targetRPCAddress, targetFaucetAddress)
122218
if err != nil {
123219
return err
124220
}
125221

126222
s.SetText("Configuring...").Start()
127223

128-
connectionID, err := sourceChain.Connect(cmd.Context(), targetChain)
224+
// sets advanced channel options
225+
var channelOptions []xrelayer.ChannelOption
226+
if advanced {
227+
channelOptions = append(channelOptions,
228+
xrelayer.SourcePort(sourcePort),
229+
xrelayer.SourceVersion(sourceVersion),
230+
xrelayer.TargetPort(targetPort),
231+
xrelayer.TargetVersion(targetVersion),
232+
)
233+
234+
if ordered {
235+
channelOptions = append(channelOptions, xrelayer.Ordered())
236+
}
237+
}
238+
239+
// create the connection configuration
240+
connectionID, err := sourceChain.Connect(cmd.Context(), targetChain, channelOptions...)
129241
if err != nil {
130242
return err
131243
}
@@ -136,3 +248,47 @@ func relayerConfigureHandler(cmd *cobra.Command, args []string) error {
136248

137249
return nil
138250
}
251+
252+
// initChain initializes chain information for the relayer connection
253+
func initChain(cmd *cobra.Command, s *clispinner.Spinner, name, rpcAddr, faucetAddr string) (*xrelayer.Chain, error) {
254+
defer s.Stop()
255+
s.SetText("Initializing chain...").Start()
256+
257+
c, err := xrelayer.NewChain(cmd.Context(), rpcAddr, xrelayer.WithFaucet(faucetAddr))
258+
if err != nil {
259+
return nil, errors.Wrapf(err, "cannot resolve %s", name)
260+
}
261+
262+
account, err := c.Account(cmd.Context())
263+
if err != nil {
264+
return nil, err
265+
}
266+
267+
s.Stop()
268+
269+
fmt.Printf("🔐 Account on %q is %q\n \n", name, account.Address)
270+
s.
271+
SetCharset(spinner.CharSets[9]).
272+
SetColor("white").
273+
SetPrefix(" |·").
274+
SetText(color.Yellow.Sprintf("trying to receive tokens from a faucet...")).
275+
Start()
276+
277+
err = c.TryFaucet(cmd.Context())
278+
s.Stop()
279+
280+
fmt.Print(" |· ")
281+
if err != nil {
282+
fmt.Println(color.Yellow.Sprintf(err.Error()))
283+
} else {
284+
fmt.Println(color.Green.Sprintf("received coins from a faucet"))
285+
}
286+
287+
coins, err := c.Balance(cmd.Context())
288+
if err != nil {
289+
return nil, err
290+
}
291+
fmt.Printf(" |· (balance: %s)\n\n", coins)
292+
293+
return c, nil
294+
}

starport/interface/cli/starport/cmd/relayer_connect.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func relayerConnectHandler(cmd *cobra.Command, args []string) error {
8585
w.Flush()
8686
}
8787

88-
printSection("Listening and relaying txs between chains...")
88+
printSection("Listening and relaying packets between chains...")
8989

9090
return xrelayer.Start(cmd.Context(), pathsToUse...)
9191
}

0 commit comments

Comments
 (0)