I know polkadot{.js} has an API to access contract storage here:
How do I get the code hash via the account?
Substrate and Polkadot Stack Exchange is a question and answer site for developers building blockchains with the Substrate SDK. It only takes a minute to sign up.
Sign up to join this communityI know polkadot{.js} has an API to access contract storage here:
How do I get the code hash via the account?
You can write something similar:
import { ApiPromise, WsProvider } from '@polkadot/api';
export const fetchCodeHash = async () => {
// Canvas
const wsCanvasProvider = new WsProvider('wss://rococo-canvas-rpc.polkadot.io');
const canvasApi = await ApiPromise.create({ provider: wsCanvasProvider });
const account = "0x2ce787b4b143ff878457c7dc9dc44e34a22e3fa9db5a8fad07bfb384b99c614b";
console.log((await canvasApi.query.contracts.codeStorage(account)).toHuman());
}
If the account has a contract, you will get similar output:
{
instructionWeightsVersion: '2',
initial: '2',
maximum: '16',
code: '0x0061736d0100000001771260037f7f7f017f60027f7f017f60037f7f7f0060027f7f0060047f7f7f7f0060017f0060057f7f7f7f7f0060037e7e7f0060000060047f7f7e7e0060017f017e60047f7f7f7f017f60067f7f7f7f7f7f0060057f7f7f7e7e006000017f60057f7f7f7e7e017f60017f017f60077f7f7f7f7f7f7f017f02fb010b057365616c30127365616c5f6465'... 61548 more characters
}
The above doesn't work with the contract address decoded to u8 Array and then converted to Hex. Instead you can pass directly AccountId as contract address with the code below, and it should give you the correct codeHash.
export const fetchCodeHash = async (contractAddress: string) => {
const providerApi = await initializeProviderApi(); // provider API is the same as in the first answer, just abstracted away
if (!providerApi) return;
const { codeHash } = await (await providerApi.query.contracts.contractInfoOf(contractAddress)).toHuman() as { codeHash: string };
console.log(codeHash);
};