@@ -101,18 +101,26 @@ def retrieve(
101101
102102 async def load_from_disk (self , chain_endpoint : str ):
103103 db = AsyncSqliteDB (chain_endpoint = chain_endpoint )
104- block_mapping , block_hash_mapping , runtime_version_mapping = await db .load_runtime_cache (chain_endpoint )
104+ (
105+ block_mapping ,
106+ block_hash_mapping ,
107+ runtime_version_mapping ,
108+ ) = await db .load_runtime_cache (chain_endpoint )
105109 if not any ([block_mapping , block_hash_mapping , runtime_version_mapping ]):
106110 logger .debug ("No runtime mappings in disk cache" )
107111 else :
108112 logger .debug ("Found runtime mappings in disk cache" )
109- self .blocks = {x : Runtime .deserialize (y ) for x , y in block_mapping .items ()}
110- self .block_hashes = {x : Runtime .deserialize (y ) for x , y in block_hash_mapping .items ()}
111- self .versions = {x : Runtime .deserialize (y ) for x , y in runtime_version_mapping .items ()}
113+ self .blocks = block_mapping
114+ self .block_hashes = block_hash_mapping
115+ self .versions = {
116+ x : Runtime .deserialize (y ) for x , y in runtime_version_mapping .items ()
117+ }
112118
113119 async def dump_to_disk (self , chain_endpoint : str ):
114120 db = AsyncSqliteDB (chain_endpoint = chain_endpoint )
115- await db .dump_runtime_cache (chain_endpoint , self .blocks , self .block_hashes , self .versions )
121+ await db .dump_runtime_cache (
122+ chain_endpoint , self .blocks , self .block_hashes , self .versions
123+ )
116124
117125
118126class Runtime :
@@ -163,30 +171,40 @@ def __init__(
163171 self .load_registry_type_map ()
164172
165173 def serialize (self ):
174+ metadata_value = self .metadata .data .data
166175 return {
167176 "chain" : self .chain ,
168177 "type_registry" : self .type_registry ,
169- "metadata" : self .metadata ,
170- "metadata_v15" : self .metadata_v15 .to_json () if self .metadata_v15 is not None else None ,
171- "runtime_info" : self .runtime_info ,
172- "registry" : None , # gets loaded from metadata_v15
178+ "metadata_value" : metadata_value ,
179+ "metadata_v15" : None , # TODO new bt-decode
180+ "runtime_info" : {
181+ "specVersion" : self .runtime_version ,
182+ "transactionVersion" : self .transaction_version ,
183+ },
184+ "registry" : self .registry .registry if self .registry is not None else None ,
173185 "ss58_format" : self .ss58_format ,
174- "runtime_config" : self .runtime_config ,
175186 }
176187
177188 @classmethod
178189 def deserialize (cls , serialized : dict ) -> "Runtime" :
179- mdv15 = MetadataV15
180- registry = PortableRegistry .from_metadata_v15 (mdv15 ) if (mdv15 := serialized ["metadata_v15" ]) else None
190+ ss58_format = serialized ["ss58_format" ]
191+ runtime_config = RuntimeConfigurationObject (ss58_format = ss58_format )
192+ runtime_config .clear_type_registry ()
193+ runtime_config .update_type_registry (load_type_registry_preset (name = "core" ))
194+ metadata = runtime_config .create_scale_object (
195+ "MetadataVersioned" , data = ScaleBytes (serialized ["metadata_value" ])
196+ )
197+ metadata .decode ()
198+ registry = PortableRegistry .from_json (serialized ["registry" ])
181199 return cls (
182200 chain = serialized ["chain" ],
183- metadata = serialized [ " metadata" ] ,
201+ metadata = metadata ,
184202 type_registry = serialized ["type_registry" ],
185- runtime_config = serialized [ " runtime_config" ] ,
186- metadata_v15 = mdv15 if mdv15 is not None else None ,
203+ runtime_config = runtime_config ,
204+ metadata_v15 = None ,
187205 registry = registry ,
188- ss58_format = serialized [ " ss58_format" ] ,
189- runtime_info = serialized ["runtime_info" ]
206+ ss58_format = ss58_format ,
207+ runtime_info = serialized ["runtime_info" ],
190208 )
191209
192210 def load_runtime (self ):
0 commit comments