Skip to content

Commit 42e490f

Browse files
authored
Merge pull request #55 from datachainlab/feature/v0.5.13-op
Support the new interface of `SetupHeadersForUpdate`, which returns chan
2 parents f0606a4 + 0070614 commit 42e490f

File tree

4 files changed

+27
-20
lines changed

4 files changed

+27
-20
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/ethereum/go-ethereum v1.14.12
1616
github.com/gogo/protobuf v1.3.2
1717
github.com/grpc-ecosystem/grpc-gateway v1.16.0
18-
github.com/hyperledger-labs/yui-relayer v0.5.15
18+
github.com/hyperledger-labs/yui-relayer v0.5.16
1919
github.com/oasisprotocol/oasis-core/go v0.2403.1
2020
github.com/spf13/cobra v1.8.1
2121
github.com/spf13/viper v1.19.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -736,8 +736,8 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr
736736
github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw=
737737
github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w=
738738
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
739-
github.com/hyperledger-labs/yui-relayer v0.5.15 h1:kNJeUV9NJx51Txe9Y4ud6WNWQPMnWXvsReTBjQfp1jg=
740-
github.com/hyperledger-labs/yui-relayer v0.5.15/go.mod h1:fyY5rY+lqyAAlr1AsWXsB22Qj5phbw/oszgZBL9UeEM=
739+
github.com/hyperledger-labs/yui-relayer v0.5.16 h1:NauHZ08JsfIvkzopafR/5/TbRCAH7JSUgqm7YrUEQ/4=
740+
github.com/hyperledger-labs/yui-relayer v0.5.16/go.mod h1:tGNMIE1y4cGNyRRKhR9rfBtCGLVjgejf3EIXouvdDQc=
741741
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
742742
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
743743
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=

relay/lcp.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -397,26 +397,28 @@ func (pr *Prover) updateELC(ctx context.Context, elcClientID string, includeStat
397397

398398
// 2. query the header from the upstream chain
399399

400-
headers, err := pr.originProver.SetupHeadersForUpdate(ctx, NewLCPQuerier(pr.lcpServiceClient, elcClientID), latestHeader)
400+
headerStream, err := pr.originProver.SetupHeadersForUpdate(ctx, NewLCPQuerier(pr.lcpServiceClient, elcClientID), latestHeader)
401401
if err != nil {
402402
return nil, err
403403
}
404-
if len(headers) == 0 {
405-
return nil, nil
406-
}
407404

408405
// 3. send a request that contains a header from 2 to update the client in ELC
409406
var responses []*elc.MsgUpdateClientResponse
410-
for _, header := range headers {
411-
anyHeader, err := clienttypes.PackClientMessage(header)
407+
i := 0
408+
for h := range headerStream {
409+
if h.Error != nil {
410+
return nil, fmt.Errorf("failed to setup a header for update: i=%v %w", i, h.Error)
411+
}
412+
anyHeader, err := clienttypes.PackClientMessage(h.Header)
412413
if err != nil {
413-
return nil, err
414+
return nil, fmt.Errorf("failed to pack header: i=%v header=%v %w", i, h.Header, err)
414415
}
415416
res, err := updateClient(ctx, pr.config.GetMaxChunkSizeForUpdateClient(), pr.lcpServiceClient, anyHeader, elcClientID, includeState, pr.activeEnclaveKey.GetEnclaveKeyAddress().Bytes())
416417
if err != nil {
417-
return nil, err
418+
return nil, fmt.Errorf("failed to update ELC: i=%v elc_client_id=%v %w", i, pr.config.ElcClientId, err)
418419
}
419420
responses = append(responses, res)
421+
i += 1
420422
}
421423

422424
return responses, nil

relay/prover.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

229234
type MessageAggregator func(ctx context.Context, in *elc.MsgAggregateMessages, opts ...grpc.CallOption) (*elc.MsgAggregateMessagesResponse, error)

0 commit comments

Comments
 (0)