@@ -172,26 +172,27 @@ func (pr *Prover) GetLatestFinalizedHeader(ctx context.Context) (core.Header, er
172172// SetupHeadersForUpdate returns the finalized header and any intermediate headers needed to apply it to the client on the counterparty chain
173173// The order of the returned header slice should be as: [<intermediate headers>..., <update header>]
174174// if the header slice's length == nil and err == nil, the relayer should skip the update-client
175- func (pr * Prover ) SetupHeadersForUpdate (ctx context.Context , dstChain core.FinalityAwareChain , latestFinalizedHeader core.Header ) ([] core.Header , error ) {
175+ func (pr * Prover ) SetupHeadersForUpdate (ctx context.Context , dstChain core.FinalityAwareChain , latestFinalizedHeader core.Header ) (<- chan * core.HeaderOrError , error ) {
176176 if err := pr .UpdateEKIIfNeeded (ctx , dstChain ); err != nil {
177177 return nil , err
178178 }
179179
180- headers , err := pr .originProver .SetupHeadersForUpdate (ctx , dstChain , latestFinalizedHeader )
180+ headerStream , err := pr .originProver .SetupHeadersForUpdate (ctx , dstChain , latestFinalizedHeader )
181181 if err != nil {
182182 return nil , fmt .Errorf ("failed to setup headers for update: header=%v %w" , latestFinalizedHeader , err )
183183 }
184- if len (headers ) == 0 {
185- return nil , nil
186- }
187184 var (
188185 messages [][]byte
189186 signatures [][]byte
190187 )
191- for i , h := range headers {
192- anyHeader , err := clienttypes .PackClientMessage (h )
188+ i := 0
189+ for h := range headerStream {
190+ if h .Error != nil {
191+ return nil , fmt .Errorf ("failed to setup a header for update: i=%v %w" , i , h .Error )
192+ }
193+ anyHeader , err := clienttypes .PackClientMessage (h .Header )
193194 if err != nil {
194- return nil , fmt .Errorf ("failed to pack header: i=%v header=%v %w" , i , h , err )
195+ return nil , fmt .Errorf ("failed to pack header: i=%v header=%v %w" , i , h . Header , err )
195196 }
196197 res , err := updateClient (ctx , pr .config .GetMaxChunkSizeForUpdateClient (), pr .lcpServiceClient , anyHeader , pr .config .ElcClientId , false , pr .activeEnclaveKey .GetEnclaveKeyAddress ().Bytes ())
197198 if err != nil {
@@ -203,6 +204,10 @@ func (pr *Prover) SetupHeadersForUpdate(ctx context.Context, dstChain core.Final
203204 }
204205 messages = append (messages , res .Message )
205206 signatures = append (signatures , res .Signature )
207+ i ++
208+ }
209+ if i == 0 {
210+ return core .MakeHeaderStream (), nil
206211 }
207212
208213 var updates []core.Header
@@ -223,7 +228,7 @@ func (pr *Prover) SetupHeadersForUpdate(ctx context.Context, dstChain core.Final
223228 })
224229 }
225230 }
226- return updates , nil
231+ return core . MakeHeaderStream ( updates ... ) , nil
227232}
228233
229234type MessageAggregator func (ctx context.Context , in * elc.MsgAggregateMessages , opts ... grpc.CallOption ) (* elc.MsgAggregateMessagesResponse , error )
0 commit comments