@@ -532,42 +532,69 @@ def add_portable_registry(self, metadata: 'GenericMetadataVersioned', prefix=Non
532532
533533 # Process extrinsic type in metadata to register correct Address and ExtrinsicSignature types
534534 try :
535- # Retrieve Extrinsic using common namespace
536- extrinsic_type = self .get_decoder_class ("sp_runtime::generic::unchecked_extrinsic::UncheckedExtrinsic" )
537535
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 :
542537
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
545539
546- types_dict = {}
540+ address_type_string = f" { prefix } :: { extrinsic_dict [ 'address_type' ] } "
547541
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+ }
550549
551- type_string = f'{ prefix } ::{ param ["type" ]} '
550+ # Check if Address is MultiAddress
551+ addres_type = self .get_decoder_class (address_type_string )
552552
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" ]} '
556558
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 :
559561
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" )
565564
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 } " )
568569
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 )
571598 except NotImplementedError :
572599 pass
573600
0 commit comments