@@ -532,42 +532,69 @@ def add_portable_registry(self, metadata: 'GenericMetadataVersioned', prefix=Non
532
532
533
533
# Process extrinsic type in metadata to register correct Address and ExtrinsicSignature types
534
534
try :
535
- # Retrieve Extrinsic using common namespace
536
- extrinsic_type = self .get_decoder_class ("sp_runtime::generic::unchecked_extrinsic::UncheckedExtrinsic" )
537
535
538
- # Try to fall back on extrinsic type in metadata
539
- if extrinsic_type is None :
540
- extrinsic_type_id = metadata [1 ][1 ]['extrinsic' ]['ty' ].value
541
- extrinsic_type = self .get_decoder_class (f"{ prefix } ::{ extrinsic_type_id } " )
536
+ if metadata .version >= 15 :
542
537
543
- if extrinsic_type is not None :
544
- # Extract Address and Signature type and set in type registry
538
+ extrinsic_dict = metadata [1 ][1 ]['extrinsic' ].value
545
539
546
- types_dict = {}
540
+ address_type_string = f" { prefix } :: { extrinsic_dict [ 'address_type' ] } "
547
541
548
- for param in extrinsic_type .scale_info_type .value ['params' ]:
549
- if param ['name' ] == 'Address' :
542
+ # Update type registry
543
+ types_dict = {
544
+ "Address" : address_type_string ,
545
+ "AccountId" : address_type_string ,
546
+ "LookupSource" : address_type_string ,
547
+ "ExtrinsicSignature" : f"{ prefix } ::{ extrinsic_dict ['signature_type' ]} "
548
+ }
550
549
551
- type_string = f'{ prefix } ::{ param ["type" ]} '
550
+ # Check if Address is MultiAddress
551
+ addres_type = self .get_decoder_class (address_type_string )
552
552
553
- types_dict ['Address' ] = type_string
554
- types_dict ['AccountId' ] = type_string
555
- types_dict ['LookupSource' ] = type_string
553
+ if addres_type is self .get_decoder_class ('sp_runtime::multiaddress::MultiAddress' ):
554
+ for address_param in addres_type .scale_info_type .value ['params' ]:
555
+ if address_param ['name' ] == 'AccountId' :
556
+ # Set AccountId
557
+ types_dict ['AccountId' ] = f'{ prefix } ::{ address_param ["type" ]} '
556
558
557
- # Check if Address is MultiAddress
558
- addres_type = self . get_decoder_class ( type_string )
559
+ self . update_type_registry_types ( types_dict )
560
+ else :
559
561
560
- if addres_type is self .get_decoder_class ('sp_runtime::multiaddress::MultiAddress' ):
561
- for address_param in addres_type .scale_info_type .value ['params' ]:
562
- if address_param ['name' ] == 'AccountId' :
563
- # Set AccountId
564
- types_dict ['AccountId' ] = f'{ prefix } ::{ address_param ["type" ]} '
562
+ # Retrieve Extrinsic using common namespace
563
+ extrinsic_type = self .get_decoder_class ("sp_runtime::generic::unchecked_extrinsic::UncheckedExtrinsic" )
565
564
566
- elif param ['name' ] == 'Signature' :
567
- types_dict ['ExtrinsicSignature' ] = f'{ prefix } ::{ param ["type" ]} '
565
+ # Try to fall back on extrinsic type in metadata
566
+ if extrinsic_type is None :
567
+ extrinsic_type_id = metadata [1 ][1 ]['extrinsic' ]['ty' ].value
568
+ extrinsic_type = self .get_decoder_class (f"{ prefix } ::{ extrinsic_type_id } " )
568
569
569
- # Update type registry
570
- self .update_type_registry_types (types_dict )
570
+ if extrinsic_type is not None :
571
+ # Extract Address and Signature type and set in type registry
572
+
573
+ types_dict = {}
574
+
575
+ for param in extrinsic_type .scale_info_type .value ['params' ]:
576
+ if param ['name' ] == 'Address' :
577
+
578
+ type_string = f'{ prefix } ::{ param ["type" ]} '
579
+
580
+ types_dict ['Address' ] = type_string
581
+ types_dict ['AccountId' ] = type_string
582
+ types_dict ['LookupSource' ] = type_string
583
+
584
+ # Check if Address is MultiAddress
585
+ addres_type = self .get_decoder_class (type_string )
586
+
587
+ if addres_type is self .get_decoder_class ('sp_runtime::multiaddress::MultiAddress' ):
588
+ for address_param in addres_type .scale_info_type .value ['params' ]:
589
+ if address_param ['name' ] == 'AccountId' :
590
+ # Set AccountId
591
+ types_dict ['AccountId' ] = f'{ prefix } ::{ address_param ["type" ]} '
592
+
593
+ elif param ['name' ] == 'Signature' :
594
+ types_dict ['ExtrinsicSignature' ] = f'{ prefix } ::{ param ["type" ]} '
595
+
596
+ # Update type registry
597
+ self .update_type_registry_types (types_dict )
571
598
except NotImplementedError :
572
599
pass
573
600
0 commit comments