@@ -509,12 +509,47 @@ def update_from_scale_info_types(self, scale_info_types: list, prefix: str = Non
509
509
510
510
def add_portable_registry (self , metadata : 'GenericMetadataVersioned' , prefix = None ):
511
511
512
+ if prefix is None :
513
+ prefix = 'scale_info'
514
+
512
515
scale_info_types = metadata .portable_registry .value_object ['types' ].value_object
513
516
514
517
self .update_from_scale_info_types (scale_info_types , prefix = prefix )
515
518
516
- # Todo process extrinsic types
517
- pass
519
+ # Process extrinsic type in metadata to register correct Address and ExtrinsicSignature types
520
+ try :
521
+ extrinsic_type_id = metadata [1 ][1 ]['extrinsic' ]['ty' ].value
522
+
523
+ extrinsic_type = self .get_decoder_class (f"{ prefix } ::{ extrinsic_type_id } " )
524
+
525
+ types_dict = {}
526
+
527
+ for param in extrinsic_type .scale_info_type .value ['params' ]:
528
+ if param ['name' ] == 'Address' :
529
+
530
+ type_string = f'{ prefix } ::{ param ["type" ]} '
531
+
532
+ types_dict ['Address' ] = type_string
533
+ types_dict ['AccountId' ] = type_string
534
+ types_dict ['LookupSource' ] = type_string
535
+
536
+ # Check if Address is MultiAddress
537
+ addres_type = self .get_decoder_class (type_string )
538
+
539
+ if addres_type is self .get_decoder_class ('sp_runtime::multiaddress::MultiAddress' ):
540
+ for address_param in addres_type .scale_info_type .value ['params' ]:
541
+ if address_param ['name' ] == 'AccountId' :
542
+ # Set AccountId
543
+ types_dict ['AccountId' ] = f'{ prefix } ::{ address_param ["type" ]} '
544
+
545
+ elif param ['name' ] == 'Signature' :
546
+ types_dict ['ExtrinsicSignature' ] = f'{ prefix } ::{ param ["type" ]} '
547
+
548
+ # Update type registry
549
+ self .update_type_registry_types (types_dict )
550
+ except NotImplementedError :
551
+ pass
552
+
518
553
519
554
def add_contract_metadata_dict_to_type_registry (self , metadata_dict ):
520
555
# TODO
0 commit comments