diff --git a/async_substrate_interface/sync_substrate.py b/async_substrate_interface/sync_substrate.py index f6d1876..b10f68f 100644 --- a/async_substrate_interface/sync_substrate.py +++ b/async_substrate_interface/sync_substrate.py @@ -2506,7 +2506,7 @@ def _do_runtime_call_old( param_data = b"" if "encoder" in runtime_call_def: - param_data = runtime_call_def["encoder"](params) + param_data = [runtime_call_def["encoder"](params, self.runtime.registry)] else: for idx, param in enumerate(runtime_call_def["params"]): param_type_string = f"{param['type']}" diff --git a/async_substrate_interface/type_registry.py b/async_substrate_interface/type_registry.py index 0f224e8..52076b2 100644 --- a/async_substrate_interface/type_registry.py +++ b/async_substrate_interface/type_registry.py @@ -8,7 +8,12 @@ SubnetInfoV2, encode, ) -from scalecodec import ss58_encode +from scalecodec import ss58_decode + + +def ss58_to_bytes(ss58_string): + return bytes.fromhex(ss58_decode(ss58_string)) + _TYPE_REGISTRY: dict[str, dict] = { "types": { @@ -24,7 +29,7 @@ "type": "Vec", }, ], - "encoder": lambda addr: encode(ss58_encode(addr), "Vec"), + "encoder": lambda addr, registry: encode("Vec", registry, ss58_to_bytes(addr[0] if isinstance(addr, list) else next(iter(addr.values())))), "type": "Vec", "decoder": DelegateInfo.decode_delegated, }, @@ -97,7 +102,7 @@ }, ], "type": "Vec", - "encoder": lambda addr: encode(ss58_encode(addr), "Vec"), + "encoder": lambda addr, registry: encode("Vec", registry, ss58_to_bytes(addr[0] if isinstance(addr, list) else next(iter(addr.values())))), "decoder": StakeInfo.decode_vec, }, "get_stake_info_for_coldkeys": { @@ -108,8 +113,10 @@ }, ], "type": "Vec", - "encoder": lambda addrs: encode( - [ss58_encode(addr) for addr in addrs], "Vec>" + "encoder": lambda addrs, registry: encode( + "Vec>", + registry, + [ss58_to_bytes(x) for x in (addrs if isinstance(addrs, list) else list(addrs.values()))], ), "decoder": StakeInfo.decode_vec_tuple_vec, },