diff --git a/governance/xc_admin/packages/xc_admin_frontend/components/InstructionViews/AccountUtils.tsx b/governance/xc_admin/packages/xc_admin_frontend/components/InstructionViews/AccountUtils.tsx
new file mode 100644
index 00000000..5bb0d88a
--- /dev/null
+++ b/governance/xc_admin/packages/xc_admin_frontend/components/InstructionViews/AccountUtils.tsx
@@ -0,0 +1,34 @@
+export const SignerTag = () => {
+ return (
+
+
Wormhole Instructions
+
+ {!governanceAction && (
+ <>
+
Unknown message
+
Raw hex payload:
+
{(instruction.args.payload as Buffer).toString('hex')}
+ >
+ )}
+ {governanceAction instanceof ExecutePostedVaa &&
+ governanceAction.instructions.map((innerInstruction, index) => {
+ const multisigParser = MultisigParser.fromCluster(cluster)
+ const parsedInstruction = multisigParser.parseInstruction({
+ programId: innerInstruction.programId,
+ data: innerInstruction.data as Buffer,
+ keys: innerInstruction.keys as AccountMeta[],
+ })
+ return (
+ <>
+
+
Program
+
+ {parsedInstruction instanceof PythMultisigInstruction
+ ? 'Pyth Oracle'
+ : parsedInstruction instanceof WormholeMultisigInstruction
+ ? 'Wormhole'
+ : parsedInstruction instanceof
+ MessageBufferMultisigInstruction
+ ? 'Message Buffer'
+ : 'Unknown'}
+
+
+
+
Instruction Name
+
+ {parsedInstruction instanceof PythMultisigInstruction ||
+ parsedInstruction instanceof WormholeMultisigInstruction ||
+ parsedInstruction instanceof MessageBufferMultisigInstruction
+ ? parsedInstruction.name
+ : 'Unknown'}
+
+
+
+
Arguments
+ {parsedInstruction instanceof PythMultisigInstruction ||
+ parsedInstruction instanceof WormholeMultisigInstruction ||
+ parsedInstruction instanceof
+ MessageBufferMultisigInstruction ? (
+ Object.keys(parsedInstruction.args).length > 0 ? (
+
+
+ {Object.keys(parsedInstruction.args).map((key, index) => (
+ <>
+
+
{key}
+ {parsedInstruction.args[key] instanceof
+ PublicKey ? (
+
+ ) : typeof instruction.args[key] === 'string' &&
+ isPubkey(instruction.args[key]) ? (
+
+ ) : (
+
+ {typeof parsedInstruction.args[key] === 'string'
+ ? parsedInstruction.args[key]
+ : parsedInstruction.args[key] instanceof
+ Uint8Array
+ ? parsedInstruction.args[key].toString('hex')
+ : JSON.stringify(parsedInstruction.args[key])}
+
+ )}
+
+ {key === 'pub' &&
+ parsedInstruction.args[key].toBase58() in
+ publisherKeyToNameMappingCluster ? (
+
+ ) : null}
+ >
+ ))}
+
+ ) : (
+
No arguments
+ )
+ ) : (
+
Unknown
+ )}
+
+ {parsedInstruction instanceof PythMultisigInstruction ||
+ parsedInstruction instanceof WormholeMultisigInstruction ||
+ parsedInstruction instanceof MessageBufferMultisigInstruction ? (
+
+
Accounts
+ {Object.keys(parsedInstruction.accounts.named).length > 0 ? (
+
+
+ {Object.keys(parsedInstruction.accounts.named).map(
+ (key, index) => (
+ <>
+
+
+ {key}
+
+
+
+ {parsedInstruction.accounts.named[key]
+ .isSigner ? (
+
+ ) : null}
+ {parsedInstruction.accounts.named[key]
+ .isWritable ? (
+
+ ) : null}
+
+
+
+
+ {key === 'priceAccount' &&
+ parsedInstruction.accounts.named[
+ key
+ ].pubkey.toBase58() in
+ priceAccountKeyToSymbolMapping ? (
+
+ ) : key === 'productAccount' &&
+ parsedInstruction.accounts.named[
+ key
+ ].pubkey.toBase58() in
+ productAccountKeyToSymbolMapping ? (
+
+ ) : null}
+ >
+ )
+ )}
+ {parsedInstruction.accounts.remaining.map(
+ (accountMeta, index) => (
+ <>
+
+
+ Remaining {index + 1}
+
+
+
+ {accountMeta.isSigner ? : null}
+ {accountMeta.isWritable ? (
+
+ ) : null}
+
+
+
+
+ >
+ )
+ )}
+
+ ) : (
+
No accounts
+ )}
+
+ ) : parsedInstruction instanceof UnrecognizedProgram ? (
+ <>
+
+
Program ID
+
+ {parsedInstruction.instruction.programId.toBase58()}
+
+
+
+
Data
+
+ {parsedInstruction.instruction.data.length > 0
+ ? parsedInstruction.instruction.data.toString('hex')
+ : 'No data'}
+
+
+
+
Keys
+
+
+ {parsedInstruction.instruction.keys.map((key, index) => (
+ <>
+
+
Key {index + 1}
+
+ {key.isSigner ? : null}
+ {key.isWritable ? : null}
+
+
+
+ >
+ ))}
+
+
+ >
+ ) : null}
+ >
+ )
+ })}
+ {governanceAction instanceof EvmUpgradeContract && (
+
+ Address:
+
+
+ }
+ />
+ )}
+
+ {governanceAction instanceof CosmosUpgradeContract && (
+