diff --git a/governance/xc_admin/packages/xc_admin_frontend/.gitignore b/governance/xc_admin/packages/xc_admin_frontend/.gitignore index c87c9b39..a7e066f2 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/.gitignore +++ b/governance/xc_admin/packages/xc_admin_frontend/.gitignore @@ -34,3 +34,8 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + + +# mappings +publishers.json +signers.json diff --git a/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx b/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx index f350ebd2..abfd929a 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx @@ -144,7 +144,7 @@ const PermissionDepermissionKey = ({ {({ open }) => ( <> {isPermission ? 'Permission Key' : 'Depermission Key'} diff --git a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/Proposals.tsx b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/Proposals.tsx index 524863ee..983973dd 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/Proposals.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/Proposals.tsx @@ -173,12 +173,16 @@ const ParsedAccountPubkeyRow = ({ } const Proposal = ({ + publisherKeyToNameMapping, + multisigSignerKeyToNameMapping, proposal, proposalIndex, instructions, verified, multisig, }: { + publisherKeyToNameMapping: Record + multisigSignerKeyToNameMapping: Record proposal: TransactionAccount | undefined proposalIndex: number instructions: MultisigInstruction[] @@ -425,10 +429,20 @@ const Proposal = ({
{currentProposal.approved.map((pubkey, idx) => ( -
-
Key {idx + 1}
- -
+ <> +
+
Key {idx + 1}
+ +
+ {pubkey.toBase58() in multisigSignerKeyToNameMapping ? ( + + ) : null} + ))} ) : null} @@ -439,10 +453,20 @@ const Proposal = ({
{currentProposal.rejected.map((pubkey, idx) => ( -
-
Key {idx + 1}
- -
+ <> +
+
Key {idx + 1}
+ +
+ {pubkey.toBase58() in multisigSignerKeyToNameMapping ? ( + + ) : null} + ))} ) : null} @@ -525,28 +549,42 @@ const Proposal = ({
Value
{Object.keys(instruction.args).map((key, index) => ( -
-
{key}
- {instruction.args[key] instanceof PublicKey ? ( - +
+
{key}
+ {instruction.args[key] instanceof PublicKey ? ( + + ) : typeof instruction.args[key] === 'string' && + isPubkey(instruction.args[key]) ? ( + + ) : ( +
+ {typeof instruction.args[key] === 'string' + ? instruction.args[key] + : instruction.args[key] instanceof Uint8Array + ? instruction.args[key].toString('hex') + : JSON.stringify(instruction.args[key])} +
+ )} +
+ {key === 'pub' && + instruction.args[key].toBase58() in + publisherKeyToNameMapping ? ( + - ) : typeof instruction.args[key] === 'string' && - isPubkey(instruction.args[key]) ? ( - - ) : ( -
- {typeof instruction.args[key] === 'string' - ? instruction.args[key] - : instruction.args[key] instanceof Uint8Array - ? instruction.args[key].toString('hex') - : JSON.stringify(instruction.args[key])} -
- )} -
+ ) : null} + ))} ) : ( @@ -739,45 +777,69 @@ const Proposal = ({ {Object.keys(parsedInstruction.args).map( (key, index) => ( -
-
{key}
- {parsedInstruction.args[ + <> +
+
{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 - ] 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] - )} -
- )} -
+ ) : null} + ) )} @@ -962,7 +1024,13 @@ const Proposal = ({ ) } -const Proposals = () => { +const Proposals = ({ + publisherKeyToNameMapping, + multisigSignerKeyToNameMapping, +}: { + publisherKeyToNameMapping: Record + multisigSignerKeyToNameMapping: Record +}) => { const router = useRouter() const [currentProposal, setCurrentProposal] = useState() const [currentProposalIndex, setCurrentProposalIndex] = useState() @@ -1112,6 +1180,8 @@ const Proposals = () => {
rule.test && rule.test.test('.svg') ) diff --git a/governance/xc_admin/packages/xc_admin_frontend/pages/index.tsx b/governance/xc_admin/packages/xc_admin_frontend/pages/index.tsx index a8b4e94e..91c6e77f 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/pages/index.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/pages/index.tsx @@ -1,5 +1,6 @@ import { Tab } from '@headlessui/react' -import type { NextPage } from 'next' +import * as fs from 'fs' +import type { GetStaticProps, NextPage } from 'next' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' import Layout from '../components/layout/Layout' @@ -10,6 +11,34 @@ import { MultisigContextProvider } from '../contexts/MultisigContext' import { PythContextProvider } from '../contexts/PythContext' import { classNames } from '../utils/classNames' +export const getStaticProps: GetStaticProps = async () => { + const publisherMappingFilePath = `${ + process.env.MAPPING_BASE_PATH || '' + }publishers.json` + const publisherKeyToNameMapping = fs.existsSync(publisherMappingFilePath) + ? JSON.parse( + (await fs.promises.readFile(publisherMappingFilePath)).toString() + ) + : {} + const multisigSignerMappingFilePath = `${ + process.env.MAPPING_BASE_PATH || '' + }signers.json` + const multisigSignerKeyToNameMapping = fs.existsSync( + multisigSignerMappingFilePath + ) + ? JSON.parse( + (await fs.promises.readFile(multisigSignerMappingFilePath)).toString() + ) + : {} + + return { + props: { + publisherKeyToNameMapping, + multisigSignerKeyToNameMapping, + }, + } +} + const TAB_INFO = { General: { title: 'General', @@ -30,7 +59,10 @@ const TAB_INFO = { const DEFAULT_TAB = 'general' -const Home: NextPage = () => { +const Home: NextPage<{ + publisherKeyToNameMapping: Record + multisigSignerKeyToNameMapping: Record +}> = ({ publisherKeyToNameMapping, multisigSignerKeyToNameMapping }) => { const [currentTabIndex, setCurrentTabIndex] = useState(0) const tabInfoArray = Object.values(TAB_INFO) @@ -100,7 +132,10 @@ const Home: NextPage = () => { ) : tabInfoArray[currentTabIndex].queryString === TAB_INFO.Proposals.queryString ? ( - + ) : null}