The latest subxt release (v0.29.0) includes support for metadata v15 and generating a runtime API interface. See this PR for more detail on how to consume the new (unstable) interface. We can replace any existing RPC calls (.rpc().request("xxx")) with the generated code and presumably use the static metadata for types such as BalanceWrapper.