From 785de292256abf766c32658a921f292afa317e70 Mon Sep 17 00:00:00 2001 From: Guillermo Bescos Date: Mon, 22 May 2023 13:34:15 -0500 Subject: [PATCH 1/4] Import axios --- .../packages/xc_admin_frontend/package.json | 1 + package-lock.json | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/governance/xc_admin/packages/xc_admin_frontend/package.json b/governance/xc_admin/packages/xc_admin_frontend/package.json index 637b6bb9f5..87a5e35f53 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/package.json +++ b/governance/xc_admin/packages/xc_admin_frontend/package.json @@ -25,6 +25,7 @@ "@types/node": "^18.11.18", "@types/react": "18.0.26", "@types/react-dom": "18.0.10", + "axios": "^1.4.0", "copy-to-clipboard": "^3.3.3", "gsap": "^3.11.4", "next": "12.2.5", diff --git a/package-lock.json b/package-lock.json index 61a8a3e23f..77efc321bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1417,6 +1417,7 @@ "@types/node": "^18.11.18", "@types/react": "18.0.26", "@types/react-dom": "18.0.10", + "axios": "^1.4.0", "copy-to-clipboard": "^3.3.3", "gsap": "^3.11.4", "next": "12.2.5", @@ -21997,10 +21998,9 @@ } }, "node_modules/axios": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", - "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", - "dev": true, + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -78690,10 +78690,9 @@ "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==" }, "axios": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", - "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", - "dev": true, + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -105817,6 +105816,7 @@ "@types/react": "18.0.26", "@types/react-dom": "18.0.10", "autoprefixer": "^10.4.8", + "axios": "^1.4.0", "copy-to-clipboard": "^3.3.3", "eslint": "8.22.0", "eslint-config-next": "12.2.5", From 89b5c9b2e28d5b951613ad81d7ce7752470f24d7 Mon Sep 17 00:00:00 2001 From: Guillermo Bescos Date: Mon, 22 May 2023 14:25:20 -0500 Subject: [PATCH 2/4] Switch to axios --- .../components/PermissionDepermissionKey.tsx | 11 +++++------ .../components/tabs/General.tsx | 11 +++++------ .../xc_admin_frontend/pages/index.tsx | 19 ++----------------- 3 files changed, 12 insertions(+), 29 deletions(-) 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 e4533e8e8b..ade0e8b276 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx @@ -6,6 +6,7 @@ import { useWallet } from '@solana/wallet-adapter-react' import { WalletModalButton } from '@solana/wallet-adapter-react-ui' import { Cluster, PublicKey, TransactionInstruction } from '@solana/web3.js' import SquadsMesh from '@sqds/mesh' +import axios from 'axios' import { Fragment, useContext, useEffect, useState } from 'react' import toast from 'react-hot-toast' import { @@ -98,13 +99,11 @@ const PermissionDepermissionKey = ({ }) setIsSubmitButtonLoading(true) try { - const proposalPubkey = await proposeInstructions( - squads, - PRICE_FEED_MULTISIG[getMultisigCluster(cluster)], - instructions, - isRemote, - wormholeAddress + const response = await axios.post( + process.env.PROPOSER_SERVER_URL + '/api/propose', + { instructions, cluster } ) + const { proposalPubkey } = response.data toast.success(`Proposal sent! 🚀 Proposal Pubkey: ${proposalPubkey}`) setIsSubmitButtonLoading(false) closeModal() diff --git a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx index 1938a732d0..8466c7562d 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx @@ -3,6 +3,7 @@ import { AccountType, getPythProgramKeyForCluster } from '@pythnetwork/client' import { PythOracle, pythOracleProgram } from '@pythnetwork/client/lib/anchor' import { useWallet } from '@solana/wallet-adapter-react' import { Cluster, PublicKey, TransactionInstruction } from '@solana/web3.js' +import axios from 'axios' import { useCallback, useContext, useEffect, useState } from 'react' import toast from 'react-hot-toast' import { @@ -464,13 +465,11 @@ const General = () => { setIsSendProposalButtonLoading(true) try { - const proposalPubkey = await proposeInstructions( - proposeSquads, - PRICE_FEED_MULTISIG[getMultisigCluster(cluster)], - instructions, - isRemote, - wormholeAddress + const response = await axios.post( + process.env.PROPOSER_SERVER_URL + '/api/propose', + { instructions, cluster } ) + const { proposalPubkey } = response.data toast.success(`Proposal sent! 🚀 Proposal Pubkey: ${proposalPubkey}`) setIsSendProposalButtonLoading(false) closeModal() 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 2b14e8b8fd..3797f7cf89 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/pages/index.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/pages/index.tsx @@ -17,11 +17,6 @@ import { StatusFilterProvider } from '../contexts/StatusFilterContext' import { classNames } from '../utils/classNames' export const getServerSideProps: GetServerSideProps = async () => { - const KEYPAIR_BASE_PATH = process.env.KEYPAIR_BASE_PATH || '' - const OPS_WALLET = fs.existsSync(`${KEYPAIR_BASE_PATH}/ops-key`) - ? JSON.parse(fs.readFileSync(`${KEYPAIR_BASE_PATH}/ops-key`, 'ascii')) - : null - const MAPPINGS_BASE_PATH = process.env.MAPPINGS_BASE_PATH || '' const PUBLISHER_PYTHNET_MAPPING_PATH = `${MAPPINGS_BASE_PATH}/publishers-pythnet.json` const PUBLISHER_PYTHTEST_MAPPING_PATH = `${MAPPINGS_BASE_PATH}/publishers-pythtest.json` @@ -53,7 +48,6 @@ export const getServerSideProps: GetServerSideProps = async () => { return { props: { - OPS_WALLET, publisherKeyToNameMapping, multisigSignerKeyToNameMapping, }, @@ -81,22 +75,13 @@ const TAB_INFO = { const DEFAULT_TAB = 'general' const Home: NextPage<{ - OPS_WALLET: number[] | null publisherKeyToNameMapping: Record> multisigSignerKeyToNameMapping: Record -}> = ({ - OPS_WALLET, - publisherKeyToNameMapping, - multisigSignerKeyToNameMapping, -}) => { +}> = ({ publisherKeyToNameMapping, multisigSignerKeyToNameMapping }) => { const [currentTabIndex, setCurrentTabIndex] = useState(0) const tabInfoArray = Object.values(TAB_INFO) const anchorWallet = useAnchorWallet() - const wallet = OPS_WALLET - ? (new NodeWallet( - Keypair.fromSecretKey(Uint8Array.from(OPS_WALLET)) - ) as Wallet) - : (anchorWallet as Wallet) + const wallet = anchorWallet as Wallet const router = useRouter() From 40e501466f0ae00c5ad9039817dedfd89e7cbc57 Mon Sep 17 00:00:00 2001 From: Guillermo Bescos Date: Mon, 22 May 2023 14:55:12 -0500 Subject: [PATCH 3/4] Fix --- .../components/PermissionDepermissionKey.tsx | 21 ++++++++++++------- .../components/tabs/General.tsx | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) 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 ade0e8b276..40b5a21ab4 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx @@ -78,29 +78,34 @@ const PermissionDepermissionKey = ({ const fundingAccount = isRemote ? mapKey(multisigAuthority) : multisigAuthority - priceAccounts.map((priceAccount) => { - isPermission - ? pythProgramClient.methods + + for (const priceAccount of priceAccounts) { + if (isPermission) { + instructions.push( + await pythProgramClient.methods .addPublisher(new PublicKey(publisherKey)) .accounts({ fundingAccount, priceAccount: priceAccount, }) .instruction() - .then((instruction) => instructions.push(instruction)) - : pythProgramClient.methods + ) + } else { + instructions.push( + await pythProgramClient.methods .delPublisher(new PublicKey(publisherKey)) .accounts({ fundingAccount, priceAccount: priceAccount, }) .instruction() - .then((instruction) => instructions.push(instruction)) - }) + ) + } + } setIsSubmitButtonLoading(true) try { const response = await axios.post( - process.env.PROPOSER_SERVER_URL + '/api/propose', + process.env.NEXT_PUBLIC_PROPOSER_SERVER_URL + '/api/propose', { instructions, cluster } ) const { proposalPubkey } = response.data diff --git a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx index 8466c7562d..554e5a68eb 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx @@ -466,7 +466,7 @@ const General = () => { setIsSendProposalButtonLoading(true) try { const response = await axios.post( - process.env.PROPOSER_SERVER_URL + '/api/propose', + process.env.NEXT_PUBLIC_PROPOSER_SERVER_URL + '/api/propose', { instructions, cluster } ) const { proposalPubkey } = response.data From 9b79a719a49927bc0fa6a3493d996c0605b8775d Mon Sep 17 00:00:00 2001 From: Guillermo Bescos Date: Mon, 22 May 2023 15:12:35 -0500 Subject: [PATCH 4/4] Error handling --- .../components/PermissionDepermissionKey.tsx | 8 ++++++-- .../xc_admin_frontend/components/tabs/General.tsx | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) 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 40b5a21ab4..fb32fae8d5 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/PermissionDepermissionKey.tsx @@ -112,8 +112,12 @@ const PermissionDepermissionKey = ({ toast.success(`Proposal sent! 🚀 Proposal Pubkey: ${proposalPubkey}`) setIsSubmitButtonLoading(false) closeModal() - } catch (e: any) { - toast.error(capitalizeFirstLetter(e.message)) + } catch (error: any) { + if (error.response) { + toast.error(capitalizeFirstLetter(error.response.data)) + } else { + toast.error(capitalizeFirstLetter(error.message)) + } setIsSubmitButtonLoading(false) } } diff --git a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx index 554e5a68eb..53a6a77722 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx @@ -473,8 +473,12 @@ const General = () => { toast.success(`Proposal sent! 🚀 Proposal Pubkey: ${proposalPubkey}`) setIsSendProposalButtonLoading(false) closeModal() - } catch (e: any) { - toast.error(capitalizeFirstLetter(e.message)) + } catch (error: any) { + if (error.response) { + toast.error(capitalizeFirstLetter(error.response.data)) + } else { + toast.error(capitalizeFirstLetter(error.message)) + } setIsSendProposalButtonLoading(false) } }