ghost-extension-wallet/src/containers/WalletPopup/api/decodeCallData.ts
Uncle Fatso d3274222f9
rewrite extension around new UX
Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
2026-10-08 18:25:56 +03:00

31 lines
1.2 KiB
TypeScript

import { getObservableClient } from "@polkadot-api/observable-client"
import { createClient } from "@polkadot-api/substrate-client"
import { decAnyMetadata, unifyMetadata } from "@polkadot-api/substrate-bindings"
import { helper } from "@substrate/light-client-extension-helpers/extension-page"
import { getLookupFn } from "@polkadot-api/metadata-builders"
import { getViewBuilder } from "@polkadot-api/view-builder"
export const decodeCallData = async (chainId: string, callData: string) => {
const chains = await helper.getChains()
const chain = chains.find(({ genesisHash }) => genesisHash === chainId)
if (!chain) throw new Error("unknown chain")
const client = createClient(chain.provider)
try {
const metadata = await new Promise<string>((resolve, reject) =>
client._request("state_getMetadata", [], {
onSuccess: (result) => resolve(result as string),
onError: reject,
}),
)
.catch(_ => undefined)
if (!metadata) return undefined
const convertedMetadata = unifyMetadata(decAnyMetadata(metadata))
return getViewBuilder(getLookupFn(convertedMetadata)).callDecoder(callData)
} catch {
return undefined
}
}