99
1010 actiontypes "github.com/LumeraProtocol/lumera/x/action/v1/types"
1111 "github.com/LumeraProtocol/supernode/pkg/codec"
12+ "github.com/LumeraProtocol/supernode/pkg/crypto"
1213 "github.com/LumeraProtocol/supernode/pkg/errors"
1314 "github.com/LumeraProtocol/supernode/pkg/logtrace"
1415 "github.com/LumeraProtocol/supernode/pkg/utils"
@@ -26,7 +27,7 @@ type DownloadRequest struct {
2627type DownloadResponse struct {
2728 EventType SupernodeEventType
2829 Message string
29- Artefacts [] byte
30+ FilePath string
3031 DownloadedDir string
3132}
3233
@@ -44,7 +45,7 @@ func (task *CascadeRegistrationTask) Download(
4445 return task .wrapErr (ctx , "failed to get action" , err , fields )
4546 }
4647 logtrace .Info (ctx , "action has been retrieved" , fields )
47- task .streamDownloadEvent (SupernodeEventTypeActionRetrieved , "action has been retrieved" , nil , "" , send )
48+ task .streamDownloadEvent (SupernodeEventTypeActionRetrieved , "action has been retrieved" , "" , "" , send )
4849
4950 if actionDetails .GetAction ().State != actiontypes .ActionStateDone {
5051 err = errors .New ("action is not in a valid state" )
@@ -53,28 +54,28 @@ func (task *CascadeRegistrationTask) Download(
5354 return task .wrapErr (ctx , "action not found" , err , fields )
5455 }
5556 logtrace .Info (ctx , "action has been validated" , fields )
56- task .streamDownloadEvent (SupernodeEventTypeActionFinalized , "action state has been validated" , nil , "" , send )
57+ task .streamDownloadEvent (SupernodeEventTypeActionFinalized , "action state has been validated" , "" , "" , send )
5758
5859 metadata , err := task .decodeCascadeMetadata (ctx , actionDetails .GetAction ().Metadata , fields )
5960 if err != nil {
6061 fields [logtrace .FieldError ] = err .Error ()
6162 return task .wrapErr (ctx , "error decoding cascade metadata" , err , fields )
6263 }
6364 logtrace .Info (ctx , "cascade metadata has been decoded" , fields )
64- task .streamDownloadEvent (SupernodeEventTypeMetadataDecoded , "metadata has been decoded" , nil , "" , send )
65+ task .streamDownloadEvent (SupernodeEventTypeMetadataDecoded , "metadata has been decoded" , "" , "" , send )
6566
66- file , tmpDir , err := task .downloadArtifacts (ctx , actionDetails .GetAction ().ActionID , metadata , fields )
67+ filePath , tmpDir , err := task .downloadArtifacts (ctx , actionDetails .GetAction ().ActionID , metadata , fields )
6768 if err != nil {
6869 fields [logtrace .FieldError ] = err .Error ()
6970 return task .wrapErr (ctx , "failed to download artifacts" , err , fields )
7071 }
7172 logtrace .Info (ctx , "artifacts have been downloaded" , fields )
72- task .streamDownloadEvent (SupernodeEventTypeArtefactsDownloaded , "artifacts have been downloaded" , file , tmpDir , send )
73+ task .streamDownloadEvent (SupernodeEventTypeArtefactsDownloaded , "artifacts have been downloaded" , filePath , tmpDir , send )
7374
7475 return nil
7576}
7677
77- func (task * CascadeRegistrationTask ) downloadArtifacts (ctx context.Context , actionID string , metadata actiontypes.CascadeMetadata , fields logtrace.Fields ) ([] byte , string , error ) {
78+ func (task * CascadeRegistrationTask ) downloadArtifacts (ctx context.Context , actionID string , metadata actiontypes.CascadeMetadata , fields logtrace.Fields ) (string , string , error ) {
7879 logtrace .Info (ctx , "started downloading the artifacts" , fields )
7980
8081 var layout codec.Layout
@@ -106,7 +107,7 @@ func (task *CascadeRegistrationTask) downloadArtifacts(ctx context.Context, acti
106107 }
107108
108109 if len (layout .Blocks ) == 0 {
109- return nil , "" , errors .New ("no symbols found in RQ metadata" )
110+ return "" , "" , errors .New ("no symbols found in RQ metadata" )
110111 }
111112
112113 return task .restoreFileFromLayout (ctx , layout , metadata .DataHash , actionID )
@@ -117,7 +118,7 @@ func (task *CascadeRegistrationTask) restoreFileFromLayout(
117118 layout codec.Layout ,
118119 dataHash string ,
119120 actionID string ,
120- ) ([] byte , string , error ) {
121+ ) (string , string , error ) {
121122
122123 fields := logtrace.Fields {
123124 logtrace .FieldActionID : actionID ,
@@ -139,7 +140,7 @@ func (task *CascadeRegistrationTask) restoreFileFromLayout(
139140 if err != nil {
140141 fields [logtrace .FieldError ] = err .Error ()
141142 logtrace .Error (ctx , "failed to retrieve symbols" , fields )
142- return nil , "" , fmt .Errorf ("failed to retrieve symbols: %w" , err )
143+ return "" , "" , fmt .Errorf ("failed to retrieve symbols: %w" , err )
143144 }
144145
145146 fields ["retrievedSymbols" ] = len (symbols )
@@ -154,40 +155,37 @@ func (task *CascadeRegistrationTask) restoreFileFromLayout(
154155 if err != nil {
155156 fields [logtrace .FieldError ] = err .Error ()
156157 logtrace .Error (ctx , "failed to decode symbols" , fields )
157- return nil , "" , fmt .Errorf ("decode symbols using RaptorQ: %w" , err )
158+ return "" , "" , fmt .Errorf ("decode symbols using RaptorQ: %w" , err )
158159 }
159160
160- file , err := os . ReadFile (decodeInfo .FilePath )
161+ fileHash , err := crypto . HashFileIncrementally (decodeInfo .FilePath , 0 )
161162 if err != nil {
162163 fields [logtrace .FieldError ] = err .Error ()
163- logtrace .Error (ctx , "failed to read file" , fields )
164- return nil , "" , fmt .Errorf ("read decoded file: %w" , err )
164+ logtrace .Error (ctx , "failed to hash file" , fields )
165+ return "" , "" , fmt .Errorf ("hash file: %w" , err )
165166 }
166-
167- // 3. Validate hash (Blake3)
168- fileHash , err := utils .Blake3Hash (file )
169- if err != nil {
170- fields [logtrace .FieldError ] = err .Error ()
171- logtrace .Error (ctx , "failed to do hash" , fields )
172- return nil , "" , fmt .Errorf ("hash file: %w" , err )
167+ if fileHash == nil {
168+ fields [logtrace .FieldError ] = "file hash is nil"
169+ logtrace .Error (ctx , "failed to hash file" , fields )
170+ return "" , "" , errors .New ("file hash is nil" )
173171 }
174172
175173 err = task .verifyDataHash (ctx , fileHash , dataHash , fields )
176174 if err != nil {
177175 logtrace .Error (ctx , "failed to verify hash" , fields )
178176 fields [logtrace .FieldError ] = err .Error ()
179- return nil , decodeInfo .DecodeTmpDir , err
177+ return "" , decodeInfo .DecodeTmpDir , err
180178 }
181-
182179 logtrace .Info (ctx , "file successfully restored and hash verified" , fields )
183- return file , decodeInfo .DecodeTmpDir , nil
180+
181+ return decodeInfo .FilePath , decodeInfo .DecodeTmpDir , nil
184182}
185183
186- func (task * CascadeRegistrationTask ) streamDownloadEvent (eventType SupernodeEventType , msg string , file [] byte , tmpDir string , send func (resp * DownloadResponse ) error ) {
184+ func (task * CascadeRegistrationTask ) streamDownloadEvent (eventType SupernodeEventType , msg string , filePath string , tmpDir string , send func (resp * DownloadResponse ) error ) {
187185 _ = send (& DownloadResponse {
188186 EventType : eventType ,
189187 Message : msg ,
190- Artefacts : file ,
188+ FilePath : filePath ,
191189 DownloadedDir : tmpDir ,
192190 })
193191
0 commit comments