@@ -446,10 +446,10 @@ where
446
446
#[ derive( Debug , Error ) ]
447
447
pub enum ChainClientError {
448
448
#[ error( "Local node operation failed: {0}" ) ]
449
- LocalNodeError ( # [ from ] LocalNodeError ) ,
449
+ LocalNodeError ( LocalNodeError ) ,
450
450
451
451
#[ error( "Remote node operation failed: {0}" ) ]
452
- RemoteNodeError ( # [ from ] NodeError ) ,
452
+ RemoteNodeError ( NodeError ) ,
453
453
454
454
#[ error( transparent) ]
455
455
ArithmeticError ( #[ from] ArithmeticError ) ,
@@ -458,7 +458,7 @@ pub enum ChainClientError {
458
458
JsonError ( #[ from] serde_json:: Error ) ,
459
459
460
460
#[ error( "Chain operation failed: {0}" ) ]
461
- ChainError ( # [ from ] ChainError ) ,
461
+ ChainError ( ChainError ) ,
462
462
463
463
#[ error( transparent) ]
464
464
CommunicationError ( #[ from] CommunicationError < NodeError > ) ,
@@ -494,12 +494,51 @@ pub enum ChainClientError {
494
494
FoundMultipleKeysForChain ( ChainId ) ,
495
495
496
496
#[ error( transparent) ]
497
- ViewError ( # [ from ] ViewError ) ,
497
+ ViewError ( ViewError ) ,
498
498
499
499
#[ error( "Blobs not found: {0:?}" ) ]
500
500
BlobsNotFound ( Vec < BlobId > ) ,
501
501
}
502
502
503
+ impl From < NodeError > for ChainClientError {
504
+ fn from ( error : NodeError ) -> Self {
505
+ match error {
506
+ NodeError :: BlobsNotFound ( blob_ids) => Self :: BlobsNotFound ( blob_ids) ,
507
+ error => Self :: RemoteNodeError ( error) ,
508
+ }
509
+ }
510
+ }
511
+
512
+ impl From < ViewError > for ChainClientError {
513
+ fn from ( error : ViewError ) -> Self {
514
+ match error {
515
+ ViewError :: BlobsNotFound ( blob_ids) => Self :: BlobsNotFound ( blob_ids) ,
516
+ error => Self :: ViewError ( error) ,
517
+ }
518
+ }
519
+ }
520
+
521
+ impl From < LocalNodeError > for ChainClientError {
522
+ fn from ( error : LocalNodeError ) -> Self {
523
+ match error {
524
+ LocalNodeError :: BlobsNotFound ( blob_ids) => Self :: BlobsNotFound ( blob_ids) ,
525
+ error => Self :: LocalNodeError ( error) ,
526
+ }
527
+ }
528
+ }
529
+
530
+ impl From < ChainError > for ChainClientError {
531
+ fn from ( error : ChainError ) -> Self {
532
+ match error {
533
+ ChainError :: BlobsNotFound ( blob_ids)
534
+ | ChainError :: ExecutionError ( ExecutionError :: BlobsNotFound ( blob_ids) , _) => {
535
+ Self :: BlobsNotFound ( blob_ids)
536
+ }
537
+ error => Self :: ChainError ( error) ,
538
+ }
539
+ }
540
+ }
541
+
503
542
impl From < Infallible > for ChainClientError {
504
543
fn from ( infallible : Infallible ) -> Self {
505
544
match infallible { }
@@ -1122,7 +1161,7 @@ where
1122
1161
// necessary.
1123
1162
if let Err ( err) = self . process_certificate ( certificate. clone ( ) , vec ! [ ] ) . await {
1124
1163
match & err {
1125
- LocalNodeError :: WorkerError ( WorkerError :: BlobsNotFound ( blob_ids) ) => {
1164
+ LocalNodeError :: BlobsNotFound ( blob_ids) => {
1126
1165
let blobs = LocalNodeClient :: < S > :: download_blobs ( blob_ids, & nodes) . await ;
1127
1166
1128
1167
ensure ! ( blobs. len( ) == blob_ids. len( ) , err) ;
@@ -1623,8 +1662,8 @@ where
1623
1662
. handle_block_proposal ( * proposal. clone ( ) )
1624
1663
. await
1625
1664
{
1626
- if let Some ( blob_ids) = original_err. get_blobs_not_found ( ) {
1627
- self . update_local_node_with_blobs_from ( blob_ids, remote_node)
1665
+ if let LocalNodeError :: BlobsNotFound ( blob_ids) = & original_err {
1666
+ self . update_local_node_with_blobs_from ( blob_ids. clone ( ) , remote_node)
1628
1667
. await ?;
1629
1668
continue ; // We found the missing blobs: retry.
1630
1669
}
@@ -1641,9 +1680,7 @@ where
1641
1680
let mut blobs = vec ! [ ] ;
1642
1681
while let Err ( original_err) = self . client . handle_certificate ( * cert. clone ( ) , blobs) . await
1643
1682
{
1644
- if let LocalNodeError :: WorkerError ( WorkerError :: BlobsNotFound ( blob_ids) ) =
1645
- & original_err
1646
- {
1683
+ if let LocalNodeError :: BlobsNotFound ( blob_ids) = & original_err {
1647
1684
blobs = remote_node
1648
1685
. find_missing_blobs ( blob_ids. clone ( ) , chain_id)
1649
1686
. await ?;
@@ -1792,11 +1829,10 @@ where
1792
1829
. local_node
1793
1830
. stage_block_execution ( block. clone ( ) )
1794
1831
. await ;
1795
- if let Err ( err) = & result {
1796
- if let Some ( blob_ids) = err. get_blobs_not_found ( ) {
1797
- self . receive_certificates_for_blobs ( blob_ids) . await ?;
1798
- continue ; // We found the missing blob: retry.
1799
- }
1832
+ if let Err ( LocalNodeError :: BlobsNotFound ( blob_ids) ) = & result {
1833
+ self . receive_certificates_for_blobs ( blob_ids. clone ( ) )
1834
+ . await ?;
1835
+ continue ; // We found the missing blob: retry.
1800
1836
}
1801
1837
return Ok ( result?) ;
1802
1838
}
0 commit comments