@@ -94,8 +94,10 @@ func createConnectionStep(src, dst *ProvableChain) (*RelayMsgs, error) {
9494 srcUpdateHeaders , dstUpdateHeaders []Header
9595 srcCsRes , dstCsRes * clienttypes.QueryClientStateResponse
9696 srcCS , dstCS ibcexported.ClientState
97- srcCons , dstCons * clienttypes.QueryConsensusStateResponse
97+ srcConsRes , dstConsRes * clienttypes.QueryConsensusStateResponse
98+ srcCons , dstCons ibcexported.ConsensusState
9899 srcConsH , dstConsH ibcexported.Height
100+ srcHostConsProof , dstHostConsProof []byte
99101 )
100102 err = retry .Do (func () error {
101103 srcUpdateHeaders , dstUpdateHeaders , err = sh .SetupBothHeadersForUpdate (src , dst )
@@ -136,12 +138,26 @@ func createConnectionStep(src, dst *ProvableChain) (*RelayMsgs, error) {
136138
137139 // Store the heights
138140 srcConsH , dstConsH = srcCS .GetLatestHeight (), dstCS .GetLatestHeight ()
139- srcCons , dstCons , err = QueryClientConsensusStatePair (
141+ srcConsRes , dstConsRes , err = QueryClientConsensusStatePair (
140142 sh .GetQueryContext (src .ChainID ()), sh .GetQueryContext (dst .ChainID ()),
141143 src , dst , srcConsH , dstConsH , true )
142144 if err != nil {
143145 return nil , err
144146 }
147+ if err := src .Codec ().UnpackAny (srcConsRes .ConsensusState , & srcCons ); err != nil {
148+ return nil , err
149+ }
150+ if err := dst .Codec ().UnpackAny (dstConsRes .ConsensusState , & dstCons ); err != nil {
151+ return nil , err
152+ }
153+ srcHostConsProof , err = src .ProveHostConsensusState (sh .GetQueryContext (src .ChainID ()), dstCS .GetLatestHeight (), dstCons )
154+ if err != nil {
155+ return nil , err
156+ }
157+ dstHostConsProof , err = dst .ProveHostConsensusState (sh .GetQueryContext (dst .ChainID ()), srcCS .GetLatestHeight (), srcCons )
158+ if err != nil {
159+ return nil , err
160+ }
145161 }
146162
147163 switch {
@@ -160,15 +176,15 @@ func createConnectionStep(src, dst *ProvableChain) (*RelayMsgs, error) {
160176 if len (dstUpdateHeaders ) > 0 {
161177 out .Src = append (out .Src , src .Path ().UpdateClients (dstUpdateHeaders , addr )... )
162178 }
163- out .Src = append (out .Src , src .Path ().ConnTry (dst .Path (), dstCsRes , dstConn , dstCons , addr ))
179+ out .Src = append (out .Src , src .Path ().ConnTry (dst .Path (), dstCsRes , dstConn , dstConsRes , srcHostConsProof , addr ))
164180 // Handshake has started on src (1 step done), relay `connOpenTry` and `updateClient` on dst
165181 case srcConn .Connection .State == conntypes .INIT && dstConn .Connection .State == conntypes .UNINITIALIZED :
166182 logConnectionStates (dst , src , dstConn , srcConn )
167183 addr := mustGetAddress (dst )
168184 if len (srcUpdateHeaders ) > 0 {
169185 out .Dst = append (out .Dst , dst .Path ().UpdateClients (srcUpdateHeaders , addr )... )
170186 }
171- out .Dst = append (out .Dst , dst .Path ().ConnTry (src .Path (), srcCsRes , srcConn , srcCons , addr ))
187+ out .Dst = append (out .Dst , dst .Path ().ConnTry (src .Path (), srcCsRes , srcConn , srcConsRes , dstHostConsProof , addr ))
172188
173189 // Handshake has started on src end (2 steps done), relay `connOpenAck` and `updateClient` to dst end
174190 case srcConn .Connection .State == conntypes .TRYOPEN && dstConn .Connection .State == conntypes .INIT :
@@ -177,7 +193,7 @@ func createConnectionStep(src, dst *ProvableChain) (*RelayMsgs, error) {
177193 if len (srcUpdateHeaders ) > 0 {
178194 out .Dst = append (out .Dst , dst .Path ().UpdateClients (srcUpdateHeaders , addr )... )
179195 }
180- out .Dst = append (out .Dst , dst .Path ().ConnAck (src .Path (), srcCsRes , srcConn , srcCons , addr ))
196+ out .Dst = append (out .Dst , dst .Path ().ConnAck (src .Path (), srcCsRes , srcConn , srcConsRes , addr ))
181197
182198 // Handshake has started on dst end (2 steps done), relay `connOpenAck` and `updateClient` to src end
183199 case srcConn .Connection .State == conntypes .INIT && dstConn .Connection .State == conntypes .TRYOPEN :
@@ -186,7 +202,7 @@ func createConnectionStep(src, dst *ProvableChain) (*RelayMsgs, error) {
186202 if len (dstUpdateHeaders ) > 0 {
187203 out .Src = append (out .Src , src .Path ().UpdateClients (dstUpdateHeaders , addr )... )
188204 }
189- out .Src = append (out .Src , src .Path ().ConnAck (dst .Path (), dstCsRes , dstConn , dstCons , addr ))
205+ out .Src = append (out .Src , src .Path ().ConnAck (dst .Path (), dstCsRes , dstConn , dstConsRes , addr ))
190206
191207 // Handshake has confirmed on dst (3 steps done), relay `connOpenConfirm` and `updateClient` to src end
192208 case srcConn .Connection .State == conntypes .TRYOPEN && dstConn .Connection .State == conntypes .OPEN :
0 commit comments