@@ -777,7 +777,7 @@ async def name(self):
777777
778778 async def get_storage_item (self , module : str , storage_function : str , block_hash : str = None ):
779779 await self .init_runtime (block_hash = block_hash )
780- metadata_pallet = self ._metadata .get_metadata_pallet (module )
780+ metadata_pallet = self .runtime . metadata .get_metadata_pallet (module )
781781 storage_item = metadata_pallet .get_storage_function (storage_function )
782782 return storage_item
783783
@@ -815,18 +815,18 @@ async def _load_registry_at_block(self, block_hash: Optional[str]) -> MetadataV1
815815 metadata_option_hex_str = metadata_rpc_result ["result" ]
816816 metadata_option_bytes = bytes .fromhex (metadata_option_hex_str [2 :])
817817 metadata = MetadataV15 .decode_from_metadata_option (metadata_option_bytes )
818- self . registry = PortableRegistry .from_metadata_v15 (metadata )
819- self ._load_registry_type_map ()
820- return metadata
818+ registry = PortableRegistry .from_metadata_v15 (metadata )
819+ self ._load_registry_type_map (registry )
820+ return metadata , registry
821821
822822 async def _wait_for_registry (self , _attempt : int = 1 , _retries : int = 3 ) -> None :
823823 async def _waiter ():
824- while self .registry is None :
824+ while self .runtime . registry is None :
825825 await asyncio .sleep (0.1 )
826826 return
827827
828828 try :
829- if not self .registry :
829+ if not self .runtime . registry :
830830 await asyncio .wait_for (_waiter (), timeout = 10 )
831831 except TimeoutError :
832832 # indicates that registry was never loaded
@@ -893,25 +893,22 @@ async def decode_scale(
893893 return ss58_encode (scale_bytes , SS58_FORMAT )
894894 else :
895895 await self ._wait_for_registry (_attempt , _retries )
896- obj = decode_by_type_string (type_string , self .registry , scale_bytes )
896+ obj = decode_by_type_string (type_string , self .runtime . registry , scale_bytes )
897897 if return_scale_obj :
898898 return ScaleObj (obj )
899899 else :
900900 return obj
901901
902- async def load_runtime (self ,runtime_info = None , metadata = None , metadata_v15 = None , registry = None ):
902+ async def load_runtime (self ,runtime ):
903903 # Update type registry
904904 self .reload_type_registry (use_remote_preset = False , auto_discover = True )
905905
906- self .metadata_v15 = metadata_v15
907- self .registry = registry
908- self .runtime_version = runtime_info .get ("specVersion" )
909- self ._metadata = metadata
910- self .runtime_config .set_active_spec_version_id (self .runtime_version )
911- self .transaction_version = runtime_info .get ("transactionVersion" )
906+ self .runtime = runtime
907+
908+ self .runtime_config .set_active_spec_version_id (runtime .runtime_version )
912909 if self .implements_scaleinfo :
913910 logger .debug ("Add PortableRegistry from metadata to type registry" )
914- self .runtime_config .add_portable_registry (metadata )
911+ self .runtime_config .add_portable_registry (runtime . metadata )
915912 # Set runtime compatibility flags
916913 try :
917914 _ = self .runtime_config .create_scale_object ("sp_weights::weight_v2::Weight" )
@@ -957,7 +954,7 @@ async def init_runtime(
957954 f"No runtime information for block '{ block_hash } '"
958955 )
959956
960- if runtime_version == self .runtime_version :
957+ if self . runtime and runtime_version == self . runtime .runtime_version :
961958 return
962959
963960 runtime = self .runtime_cache .retrieve (runtime_version = runtime_version )
@@ -984,7 +981,7 @@ async def init_runtime(
984981 )
985982 )
986983
987- metadata_v15 = await self ._load_registry_at_block (block_hash = runtime_block_hash )
984+ metadata_v15 , registry = await self ._load_registry_at_block (block_hash = runtime_block_hash )
988985 logger .debug (
989986 "Retrieved metadata v15 for {} from Substrate node" .format (
990987 runtime_version
@@ -998,16 +995,11 @@ async def init_runtime(
998995 type_registry = self .type_registry ,
999996 metadata_v15 = metadata_v15 ,
1000997 runtime_info = runtime_info ,
1001- registry = self . registry ,
998+ registry = registry ,
1002999 )
10031000 self .runtime_cache .add_item (runtime_version = runtime_version , runtime = runtime )
10041001
1005- await self .load_runtime (
1006- runtime_info = runtime .runtime_info ,
1007- metadata = runtime .metadata ,
1008- metadata_v15 = runtime .metadata_v15 ,
1009- registry = runtime .registry ,
1010- )
1002+ await self .load_runtime (runtime )
10111003
10121004 if self .ss58_format is None :
10131005 # Check and apply runtime constants
@@ -1044,7 +1036,7 @@ async def create_storage_key(
10441036 storage_function ,
10451037 params ,
10461038 runtime_config = self .runtime_config ,
1047- metadata = self ._metadata ,
1039+ metadata = self .runtime . metadata ,
10481040 )
10491041
10501042 async def get_metadata_storage_functions (self , block_hash = None ) -> list :
@@ -1069,7 +1061,7 @@ async def get_metadata_storage_functions(self, block_hash=None) -> list:
10691061 self .serialize_storage_item (
10701062 storage_item = storage ,
10711063 module = module ,
1072- spec_version_id = self .runtime_version ,
1064+ spec_version_id = self .runtime . runtime_version ,
10731065 )
10741066 )
10751067
@@ -1112,14 +1104,14 @@ async def get_metadata_errors(
11121104
11131105 error_list = []
11141106
1115- for module_idx , module in enumerate (self ._metadata .pallets ):
1107+ for module_idx , module in enumerate (self .runtime . metadata .pallets ):
11161108 if module .errors :
11171109 for error in module .errors :
11181110 error_list .append (
11191111 self .serialize_module_error (
11201112 module = module ,
11211113 error = error ,
1122- spec_version = self .runtime_version ,
1114+ spec_version = self .runtime . runtime_version ,
11231115 )
11241116 )
11251117
@@ -1140,7 +1132,7 @@ async def get_metadata_error(self, module_name, error_name, block_hash=None):
11401132 """
11411133 await self .init_runtime (block_hash = block_hash )
11421134
1143- for module_idx , module in enumerate (self ._metadata .pallets ):
1135+ for module_idx , module in enumerate (self .runtime . metadata .pallets ):
11441136 if module .name == module_name and module .errors :
11451137 for error in module .errors :
11461138 if error_name == error .name :
@@ -1233,7 +1225,7 @@ async def decode_block(block_data, block_data_hash=None) -> dict[str, Any]:
12331225 try :
12341226 extrinsic_decoder = extrinsic_cls (
12351227 data = ScaleBytes (extrinsic_data ),
1236- metadata = self ._metadata ,
1228+ metadata = self .runtime . metadata ,
12371229 runtime_config = self .runtime_config ,
12381230 )
12391231 extrinsic_decoder .decode (check_remaining = True )
@@ -1761,7 +1753,7 @@ async def _preprocess(
17611753 """
17621754 params = query_for if query_for else []
17631755 # Search storage call in metadata
1764- metadata_pallet = self ._metadata .get_metadata_pallet (module )
1756+ metadata_pallet = self .runtime . metadata .get_metadata_pallet (module )
17651757
17661758 if not metadata_pallet :
17671759 raise SubstrateRequestException (f'Pallet "{ module } " not found' )
@@ -1797,7 +1789,7 @@ async def _preprocess(
17971789 storage_item .value ["name" ],
17981790 params ,
17991791 runtime_config = self .runtime_config ,
1800- metadata = self ._metadata ,
1792+ metadata = self .runtime . metadata ,
18011793 )
18021794 method = "state_getStorageAt"
18031795 return Preprocessed (
@@ -2048,7 +2040,7 @@ async def compose_call(
20482040 await self .init_runtime (block_hash = block_hash )
20492041
20502042 call = self .runtime_config .create_scale_object (
2051- type_string = "Call" , metadata = self ._metadata
2043+ type_string = "Call" , metadata = self .runtime . metadata
20522044 )
20532045
20542046 call .encode (
@@ -2227,12 +2219,12 @@ async def generate_signature_payload(
22272219 )
22282220
22292221 # Process signed extensions in metadata
2230- if "signed_extensions" in self ._metadata [1 ][1 ]["extrinsic" ]:
2222+ if "signed_extensions" in self .runtime . metadata [1 ][1 ]["extrinsic" ]:
22312223 # Base signature payload
22322224 signature_payload .type_mapping = [["call" , "CallBytes" ]]
22332225
22342226 # Add signed extensions to payload
2235- signed_extensions = self ._metadata .get_signed_extensions ()
2227+ signed_extensions = self .runtime . metadata .get_signed_extensions ()
22362228
22372229 if "CheckMortality" in signed_extensions :
22382230 signature_payload .type_mapping .append (
@@ -2321,10 +2313,10 @@ async def generate_signature_payload(
23212313 "era" : era ,
23222314 "nonce" : nonce ,
23232315 "tip" : tip ,
2324- "spec_version" : self .runtime_version ,
2316+ "spec_version" : self .runtime . runtime_version ,
23252317 "genesis_hash" : genesis_hash ,
23262318 "block_hash" : block_hash ,
2327- "transaction_version" : self .transaction_version ,
2319+ "transaction_version" : self .runtime . transaction_version ,
23282320 "asset_id" : {"tip" : tip , "asset_id" : tip_asset_id },
23292321 "metadata_hash" : None ,
23302322 "mode" : "Disabled" ,
@@ -2373,9 +2365,9 @@ async def create_signed_extrinsic(
23732365 raise TypeError ("'call' must be of type Call" )
23742366
23752367 # Check if extrinsic version is supported
2376- if self ._metadata [1 ][1 ]["extrinsic" ]["version" ] != 4 : # type: ignore
2368+ if self .runtime . metadata [1 ][1 ]["extrinsic" ]["version" ] != 4 : # type: ignore
23772369 raise NotImplementedError (
2378- f"Extrinsic version { self ._metadata [1 ][1 ]['extrinsic' ]['version' ]} not supported" # type: ignore
2370+ f"Extrinsic version { self .runtime . metadata [1 ][1 ]['extrinsic' ]['version' ]} not supported" # type: ignore
23792371 )
23802372
23812373 # Retrieve nonce
@@ -2417,7 +2409,7 @@ async def create_signed_extrinsic(
24172409
24182410 # Create extrinsic
24192411 extrinsic = self .runtime_config .create_scale_object (
2420- type_string = "Extrinsic" , metadata = self ._metadata
2412+ type_string = "Extrinsic" , metadata = self .runtime . metadata
24212413 )
24222414
24232415 value = {
@@ -2533,7 +2525,7 @@ async def runtime_call(
25332525 params = {}
25342526
25352527 try :
2536- metadata_v15_value = self .metadata_v15 .value ()
2528+ metadata_v15_value = self .runtime . metadata_v15 .value ()
25372529
25382530 apis = {entry ["name" ]: entry for entry in metadata_v15_value ["apis" ]}
25392531 api_entry = apis [api ]
@@ -2641,7 +2633,7 @@ async def get_metadata_constant(self, module_name, constant_name, block_hash=Non
26412633 """
26422634 await self .init_runtime (block_hash = block_hash )
26432635
2644- for module in self ._metadata .pallets :
2636+ for module in self .runtime . metadata .pallets :
26452637 if module_name == module .name and module .constants :
26462638 for constant in module .constants :
26472639 if constant_name == constant .value ["name" ]:
@@ -2790,7 +2782,7 @@ async def get_metadata_modules(self, block_hash=None) -> list[dict[str, Any]]:
27902782 "metadata_index" : idx ,
27912783 "module_id" : module .get_identifier (),
27922784 "name" : module .name ,
2793- "spec_version" : self .runtime_version ,
2785+ "spec_version" : self .runtime . runtime_version ,
27942786 "count_call_functions" : len (module .calls or []),
27952787 "count_storage_functions" : len (module .storage or []),
27962788 "count_events" : len (module .events or []),
@@ -2907,7 +2899,7 @@ async def query_map(
29072899 self .last_block_hash = block_hash
29082900 await self .init_runtime (block_hash = block_hash )
29092901
2910- metadata_pallet = self ._metadata .get_metadata_pallet (module )
2902+ metadata_pallet = self .runtime . metadata .get_metadata_pallet (module )
29112903 if not metadata_pallet :
29122904 raise ValueError (f'Pallet "{ module } " not found' )
29132905 storage_item = metadata_pallet .get_storage_function (storage_function )
@@ -2935,7 +2927,7 @@ async def query_map(
29352927 storage_item .value ["name" ],
29362928 params ,
29372929 runtime_config = self .runtime_config ,
2938- metadata = self ._metadata ,
2930+ metadata = self .runtime . metadata ,
29392931 )
29402932 prefix = storage_key .to_hex ()
29412933
0 commit comments