Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DRY handshake code #424

Merged
merged 3 commits into from
Feb 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 17 additions & 52 deletions relayer/channel.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,14 +85,20 @@ func ExecuteChannelStep(src, dst *Chain) (success, last, modified bool, err erro
msgs []sdk.Msg
)

if _, _, err := UpdateLightClients(src, dst); err != nil {
srcUpdateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, false, err
}

dstUpdateMsg, err := dst.UpdateClient(src)
if err != nil {
return false, false, false, err
}

// if either identifier is missing, an existing channel that matches the required fields
// is chosen or a new channel is created.
if src.PathEnd.ChannelID == "" || dst.PathEnd.ChannelID == "" {
success, modified, err := InitializeChannel(src, dst)
success, modified, err := InitializeChannel(src, dst, srcUpdateMsg, dstUpdateMsg)
if err != nil {
return false, false, false, err
}
Expand Down Expand Up @@ -122,13 +128,8 @@ func ExecuteChannelStep(src, dst *Chain) (success, last, modified bool, err erro
return false, false, false, err
}

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
srcUpdateMsg,
openTry,
}

Expand All @@ -151,13 +152,8 @@ func ExecuteChannelStep(src, dst *Chain) (success, last, modified bool, err erro
return false, false, false, err
}

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
srcUpdateMsg,
openAck,
}

Expand All @@ -179,13 +175,8 @@ func ExecuteChannelStep(src, dst *Chain) (success, last, modified bool, err erro
return false, false, false, err
}

updateMsg, err := dst.UpdateClient(src)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
dstUpdateMsg,
openAck,
}

Expand All @@ -200,13 +191,8 @@ func ExecuteChannelStep(src, dst *Chain) (success, last, modified bool, err erro
logChannelStates(src, dst, srcChan, dstChan)
}

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
srcUpdateMsg,
src.ChanConfirm(dstChan),
}
last = true
Expand All @@ -222,13 +208,8 @@ func ExecuteChannelStep(src, dst *Chain) (success, last, modified bool, err erro
logChannelStates(dst, src, dstChan, srcChan)
}

updateMsg, err := dst.UpdateClient(src)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
dstUpdateMsg,
dst.ChanConfirm(srcChan),
}
last = true
Expand All @@ -251,7 +232,7 @@ func ExecuteChannelStep(src, dst *Chain) (success, last, modified bool, err erro
// initialized. The PathEnds are updated upon a successful transaction.
// NOTE: This function may need to be called twice if neither channel exists.
func InitializeChannel(
src, dst *Chain,
src, dst *Chain, srcUpdateMsg, dstUpdateMsg sdk.Msg,
) (success, modified bool, err error) {
switch {

Expand All @@ -266,14 +247,8 @@ func InitializeChannel(
channelID, found := FindMatchingChannel(src, dst)
if !found {
// construct OpenInit message to be submitted on source chain

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, err
}

msgs := []sdk.Msg{
updateMsg,
srcUpdateMsg,
src.ChanInit(dst.PathEnd),
}

Expand Down Expand Up @@ -309,13 +284,8 @@ func InitializeChannel(
return false, false, err
}

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, err
}

msgs := []sdk.Msg{
updateMsg,
srcUpdateMsg,
openTry,
}
res, success, err := src.SendMsgs(msgs)
Expand Down Expand Up @@ -350,13 +320,8 @@ func InitializeChannel(
return false, false, err
}

updateMsg, err := dst.UpdateClient(src)
if err != nil {
return false, false, err
}

msgs := []sdk.Msg{
updateMsg,
dstUpdateMsg,
openTry,
}
res, success, err := dst.SendMsgs(msgs)
Expand Down
74 changes: 23 additions & 51 deletions relayer/connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,19 @@ func ExecuteConnectionStep(src, dst *Chain) (success, last, modified bool, err e
msgs []sdk.Msg
)

if _, _, err := UpdateLightClients(src, dst); err != nil {
// NOTE: proof construction for handshake messages
// relies on delivery of the associated update message.
// Updating the light client again could result in
// failed handshakes since the proof height would
// rely on a consensus state that has not been committed
// to the chain.
srcUpdateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, false, err
}

dstUpdateMsg, err := dst.UpdateClient(src)
if err != nil {
return false, false, false, err
}

Expand All @@ -92,7 +104,7 @@ func ExecuteConnectionStep(src, dst *Chain) (success, last, modified bool, err e
// is chosen or a new connection is created.
// This will perform either an OpenInit or OpenTry step and return
if src.PathEnd.ConnectionID == "" || dst.PathEnd.ConnectionID == "" {
success, modified, err := InitializeConnection(src, dst)
success, modified, err := InitializeConnection(src, dst, srcUpdateMsg, dstUpdateMsg)
if err != nil {
return false, false, false, err
}
Expand Down Expand Up @@ -122,13 +134,8 @@ func ExecuteConnectionStep(src, dst *Chain) (success, last, modified bool, err e
return false, false, false, err
}

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
srcUpdateMsg,
openTry,
}
_, success, err = src.SendMsgs(msgs)
Expand All @@ -150,13 +157,8 @@ func ExecuteConnectionStep(src, dst *Chain) (success, last, modified bool, err e
return false, false, false, err
}

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
srcUpdateMsg,
openAck,
}
_, success, err = src.SendMsgs(msgs)
Expand All @@ -177,13 +179,8 @@ func ExecuteConnectionStep(src, dst *Chain) (success, last, modified bool, err e
return false, false, false, err
}

updateMsg, err := dst.UpdateClient(src)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
dstUpdateMsg,
openAck,
}
_, success, err = dst.SendMsgs(msgs)
Expand All @@ -197,13 +194,8 @@ func ExecuteConnectionStep(src, dst *Chain) (success, last, modified bool, err e
logConnectionStates(src, dst, srcConn, dstConn)
}

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
srcUpdateMsg,
src.ConnConfirm(dstConn),
}
_, success, err = src.SendMsgs(msgs)
Expand All @@ -219,13 +211,8 @@ func ExecuteConnectionStep(src, dst *Chain) (success, last, modified bool, err e
logConnectionStates(dst, src, dstConn, srcConn)
}

updateMsg, err := dst.UpdateClient(src)
if err != nil {
return false, false, false, err
}

msgs = []sdk.Msg{
updateMsg,
dstUpdateMsg,
dst.ConnConfirm(srcConn),
}
last = true
Expand All @@ -247,7 +234,7 @@ func ExecuteConnectionStep(src, dst *Chain) (success, last, modified bool, err e
// initialized. The PathEnds are updated upon a successful transaction.
// NOTE: This function may need to be called twice if neither connection exists.
func InitializeConnection(
src, dst *Chain,
src, dst *Chain, srcUpdateMsg, dstUpdateMsg sdk.Msg,
) (success, modified bool, err error) {
switch {

Expand All @@ -263,13 +250,8 @@ func InitializeConnection(
if !found {
// construct OpenInit message to be submitted on source chain

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, err
}

msgs := []sdk.Msg{
updateMsg,
srcUpdateMsg,
src.ConnInit(dst.PathEnd),
}

Expand Down Expand Up @@ -304,13 +286,8 @@ func InitializeConnection(
return false, false, err
}

updateMsg, err := src.UpdateClient(dst)
if err != nil {
return false, false, err
}

msgs := []sdk.Msg{
updateMsg,
srcUpdateMsg,
openTry,
}
res, success, err := src.SendMsgs(msgs)
Expand Down Expand Up @@ -344,13 +321,8 @@ func InitializeConnection(
return false, false, err
}

updateMsg, err := dst.UpdateClient(src)
if err != nil {
return false, false, err
}

msgs := []sdk.Msg{
updateMsg,
dstUpdateMsg,
openTry,
}
res, success, err := dst.SendMsgs(msgs)
Expand Down
25 changes: 12 additions & 13 deletions relayer/naive-strategy.go
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,15 @@ func (nrs *NaiveStrategy) RelayAcknowledgements(src, dst *Chain, sp *RelaySequen
MaxTxSize: nrs.MaxTxSize,
MaxMsgLength: nrs.MaxMsgLength,
}
srcUpdateMsg, err := src.UpdateClient(dst)
if err != nil {
return err
}

dstUpdateMsg, err := dst.UpdateClient(src)
if err != nil {
return err
}

// add messages for sequences on src
for _, seq := range sp.Src {
Expand Down Expand Up @@ -446,21 +455,11 @@ func (nrs *NaiveStrategy) RelayAcknowledgements(src, dst *Chain, sp *RelaySequen

// Prepend non-empty msg lists with UpdateClient
if len(msgs.Dst) != 0 {
updateMsg, err := dst.UpdateClient(src)
if err != nil {
return err
}

msgs.Dst = append([]sdk.Msg{updateMsg}, msgs.Dst...)
msgs.Dst = append([]sdk.Msg{dstUpdateMsg}, msgs.Dst...)
}

if len(msgs.Src) != 0 {
updateMsg, err := src.UpdateClient(dst)
if err != nil {
return err
}

msgs.Src = append([]sdk.Msg{updateMsg}, msgs.Src...)
msgs.Src = append([]sdk.Msg{srcUpdateMsg}, msgs.Src...)
}

// send messages to their respective chains
Expand Down Expand Up @@ -563,7 +562,7 @@ func (nrs *NaiveStrategy) RelayPackets(src, dst *Chain, sp *RelaySequences) erro
}

if len(msgs.Src) != 0 {
updateMsg, err := dst.UpdateClient(src)
updateMsg, err := src.UpdateClient(dst)
Comment on lines -566 to +565
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was this wrong before?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes pretty sure. The logic doesn't hold since if you look at the code, this message is beings added to msgs.Src

if err != nil {
return err
}
Expand Down