This commit is contained in:
guibescos 2023-02-10 20:12:15 -06:00 committed by GitHub
parent f3925b4447
commit 13e48bdd51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 45 additions and 44 deletions

View File

@ -12,7 +12,7 @@ import toast from 'react-hot-toast'
import { getMultisigCluster, proposeInstructions } from 'xc_admin_common' import { getMultisigCluster, proposeInstructions } from 'xc_admin_common'
import { ClusterContext } from '../../contexts/ClusterContext' import { ClusterContext } from '../../contexts/ClusterContext'
import { usePythContext } from '../../contexts/PythContext' import { usePythContext } from '../../contexts/PythContext'
import { SECURITY_MULTISIG, useMultisig } from '../../hooks/useMultisig' import { PRICE_FEED_MULTISIG, useMultisig } from '../../hooks/useMultisig'
import { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter' import { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'
import ClusterSwitch from '../ClusterSwitch' import ClusterSwitch from '../ClusterSwitch'
import Modal from '../common/Modal' import Modal from '../common/Modal'
@ -189,7 +189,7 @@ const AddRemovePublishers = () => {
.addPublisher(new PublicKey(publisherKey)) .addPublisher(new PublicKey(publisherKey))
.accounts({ .accounts({
fundingAccount: squads?.getAuthorityPDA( fundingAccount: squads?.getAuthorityPDA(
SECURITY_MULTISIG[getMultisigCluster(cluster)], PRICE_FEED_MULTISIG[getMultisigCluster(cluster)],
1 1
), ),
priceAccount: new PublicKey( priceAccount: new PublicKey(
@ -205,7 +205,7 @@ const AddRemovePublishers = () => {
.delPublisher(new PublicKey(publisherKey)) .delPublisher(new PublicKey(publisherKey))
.accounts({ .accounts({
fundingAccount: squads?.getAuthorityPDA( fundingAccount: squads?.getAuthorityPDA(
SECURITY_MULTISIG[getMultisigCluster(cluster)], PRICE_FEED_MULTISIG[getMultisigCluster(cluster)],
1 1
), ),
priceAccount: new PublicKey( priceAccount: new PublicKey(
@ -221,7 +221,7 @@ const AddRemovePublishers = () => {
try { try {
const proposalPubkey = await proposeInstructions( const proposalPubkey = await proposeInstructions(
squads, squads,
SECURITY_MULTISIG[getMultisigCluster(cluster)], PRICE_FEED_MULTISIG[getMultisigCluster(cluster)],
instructions, instructions,
false false
) )

View File

@ -16,7 +16,7 @@ import {
} from 'xc_admin_common' } from 'xc_admin_common'
import { ClusterContext } from '../../contexts/ClusterContext' import { ClusterContext } from '../../contexts/ClusterContext'
import { usePythContext } from '../../contexts/PythContext' import { usePythContext } from '../../contexts/PythContext'
import { SECURITY_MULTISIG, useMultisig } from '../../hooks/useMultisig' import { PRICE_FEED_MULTISIG, useMultisig } from '../../hooks/useMultisig'
import { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter' import { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'
import ClusterSwitch from '../ClusterSwitch' import ClusterSwitch from '../ClusterSwitch'
import Modal from '../common/Modal' import Modal from '../common/Modal'
@ -248,7 +248,7 @@ const General = () => {
const instructions: TransactionInstruction[] = [] const instructions: TransactionInstruction[] = []
Object.keys(dataChanges).forEach(async (symbol) => { Object.keys(dataChanges).forEach(async (symbol) => {
const multisigAuthority = squads.getAuthorityPDA( const multisigAuthority = squads.getAuthorityPDA(
SECURITY_MULTISIG[getMultisigCluster(cluster)], PRICE_FEED_MULTISIG[getMultisigCluster(cluster)],
1 1
) )
const fundingAccount = isRemote const fundingAccount = isRemote
@ -404,7 +404,7 @@ const General = () => {
try { try {
const proposalPubkey = await proposeInstructions( const proposalPubkey = await proposeInstructions(
squads, squads,
SECURITY_MULTISIG[getMultisigCluster(cluster)], PRICE_FEED_MULTISIG[getMultisigCluster(cluster)],
instructions, instructions,
isRemote, isRemote,
wormholeAddress wormholeAddress

View File

@ -18,7 +18,7 @@ import toast from 'react-hot-toast'
import { getMultisigCluster, proposeInstructions } from 'xc_admin_common' import { getMultisigCluster, proposeInstructions } from 'xc_admin_common'
import { ClusterContext } from '../../contexts/ClusterContext' import { ClusterContext } from '../../contexts/ClusterContext'
import { usePythContext } from '../../contexts/PythContext' import { usePythContext } from '../../contexts/PythContext'
import { SECURITY_MULTISIG, useMultisig } from '../../hooks/useMultisig' import { PRICE_FEED_MULTISIG, useMultisig } from '../../hooks/useMultisig'
import { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter' import { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'
import ClusterSwitch from '../ClusterSwitch' import ClusterSwitch from '../ClusterSwitch'
import Modal from '../common/Modal' import Modal from '../common/Modal'
@ -178,7 +178,7 @@ const MinPublishers = () => {
.accounts({ .accounts({
priceAccount: priceAccountPubkey, priceAccount: priceAccountPubkey,
fundingAccount: squads?.getAuthorityPDA( fundingAccount: squads?.getAuthorityPDA(
SECURITY_MULTISIG[getMultisigCluster(cluster)], PRICE_FEED_MULTISIG[getMultisigCluster(cluster)],
1 1
), ),
}) })
@ -190,7 +190,7 @@ const MinPublishers = () => {
try { try {
const proposalPubkey = await proposeInstructions( const proposalPubkey = await proposeInstructions(
squads, squads,
SECURITY_MULTISIG[getMultisigCluster(cluster)], PRICE_FEED_MULTISIG[getMultisigCluster(cluster)],
instructions, instructions,
false false
) )

View File

@ -152,6 +152,7 @@ const Proposal = ({
const handleClickApprove = async () => { const handleClickApprove = async () => {
if (proposal && squads) { if (proposal && squads) {
try { try {
console.log(squads.wallet.publicKey.toBase58())
await squads.approveTransaction(proposal.publicKey) await squads.approveTransaction(proposal.publicKey)
toast.success(`Approved proposal ${proposal.publicKey.toBase58()}`) toast.success(`Approved proposal ${proposal.publicKey.toBase58()}`)
} catch (e: any) { } catch (e: any) {
@ -769,8 +770,8 @@ const Proposals = () => {
const [currentProposal, setCurrentProposal] = useState<TransactionAccount>() const [currentProposal, setCurrentProposal] = useState<TransactionAccount>()
const [currentProposalPubkey, setCurrentProposalPubkey] = useState<string>() const [currentProposalPubkey, setCurrentProposalPubkey] = useState<string>()
const { const {
securityMultisigAccount, priceFeedMultisigAccount,
securityMultisigProposals, priceFeedMultisigProposals,
isLoading: isMultisigLoading, isLoading: isMultisigLoading,
} = useMultisigContext() } = useMultisigContext()
const { connected } = useWallet() const { connected } = useWallet()
@ -795,12 +796,12 @@ const Proposals = () => {
useEffect(() => { useEffect(() => {
if (currentProposalPubkey) { if (currentProposalPubkey) {
const currentProposal = securityMultisigProposals.find( const currentProposal = priceFeedMultisigProposals.find(
(proposal) => proposal.publicKey.toBase58() === currentProposalPubkey (proposal) => proposal.publicKey.toBase58() === currentProposalPubkey
) )
setCurrentProposal(currentProposal) setCurrentProposal(currentProposal)
} }
}, [currentProposalPubkey, securityMultisigProposals]) }, [currentProposalPubkey, priceFeedMultisigProposals])
return ( return (
<div className="relative"> <div className="relative">
@ -824,9 +825,9 @@ const Proposals = () => {
<div className="mt-3"> <div className="mt-3">
<Loadbar theme="light" /> <Loadbar theme="light" />
</div> </div>
) : securityMultisigProposals.length > 0 ? ( ) : priceFeedMultisigProposals.length > 0 ? (
<div className="flex flex-col"> <div className="flex flex-col">
{securityMultisigProposals.map((proposal, idx) => ( {priceFeedMultisigProposals.map((proposal, idx) => (
<ProposalRow <ProposalRow
key={idx} key={idx}
proposal={proposal} proposal={proposal}
@ -835,7 +836,7 @@ const Proposals = () => {
))} ))}
</div> </div>
) : ( ) : (
"No proposals found. If you're a member of the security multisig, you can create a proposal." "No proposals found. If you're a member of the price feed multisig, you can create a proposal."
)} )}
</div> </div>
</> </>
@ -850,7 +851,7 @@ const Proposals = () => {
<div className="relative mt-6"> <div className="relative mt-6">
<Proposal <Proposal
proposal={currentProposal} proposal={currentProposal}
multisig={securityMultisigAccount} multisig={priceFeedMultisigAccount}
/> />
</div> </div>
</> </>

View File

@ -13,7 +13,7 @@ import toast from 'react-hot-toast'
import { getMultisigCluster, proposeInstructions } from 'xc_admin_common' import { getMultisigCluster, proposeInstructions } from 'xc_admin_common'
import { ClusterContext } from '../../contexts/ClusterContext' import { ClusterContext } from '../../contexts/ClusterContext'
import { usePythContext } from '../../contexts/PythContext' import { usePythContext } from '../../contexts/PythContext'
import { SECURITY_MULTISIG, useMultisig } from '../../hooks/useMultisig' import { PRICE_FEED_MULTISIG, useMultisig } from '../../hooks/useMultisig'
import { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter' import { capitalizeFirstLetter } from '../../utils/capitalizeFirstLetter'
import ClusterSwitch from '../ClusterSwitch' import ClusterSwitch from '../ClusterSwitch'
import Modal from '../common/Modal' import Modal from '../common/Modal'
@ -197,7 +197,7 @@ const UpdateProductMetadata = () => {
.updProduct(newProductMetadata) .updProduct(newProductMetadata)
.accounts({ .accounts({
fundingAccount: squads?.getAuthorityPDA( fundingAccount: squads?.getAuthorityPDA(
SECURITY_MULTISIG[getMultisigCluster(cluster)], PRICE_FEED_MULTISIG[getMultisigCluster(cluster)],
1 1
), ),
productAccount: symbolToProductAccountKeyMapping[symbol], productAccount: symbolToProductAccountKeyMapping[symbol],
@ -212,7 +212,7 @@ const UpdateProductMetadata = () => {
try { try {
const proposalPubkey = await proposeInstructions( const proposalPubkey = await proposeInstructions(
squads, squads,
SECURITY_MULTISIG[getMultisigCluster(cluster)], PRICE_FEED_MULTISIG[getMultisigCluster(cluster)],
instructions, instructions,
false false
) )

View File

@ -11,16 +11,16 @@ interface MultisigContextProps {
error: any // TODO: fix any error: any // TODO: fix any
squads: SquadsMesh | undefined squads: SquadsMesh | undefined
upgradeMultisigAccount: MultisigAccount | undefined upgradeMultisigAccount: MultisigAccount | undefined
securityMultisigAccount: MultisigAccount | undefined priceFeedMultisigAccount: MultisigAccount | undefined
upgradeMultisigProposals: TransactionAccount[] upgradeMultisigProposals: TransactionAccount[]
securityMultisigProposals: TransactionAccount[] priceFeedMultisigProposals: TransactionAccount[]
} }
const MultisigContext = createContext<MultisigContextProps>({ const MultisigContext = createContext<MultisigContextProps>({
upgradeMultisigAccount: undefined, upgradeMultisigAccount: undefined,
securityMultisigAccount: undefined, priceFeedMultisigAccount: undefined,
upgradeMultisigProposals: [], upgradeMultisigProposals: [],
securityMultisigProposals: [], priceFeedMultisigProposals: [],
isLoading: true, isLoading: true,
error: null, error: null,
squads: undefined, squads: undefined,
@ -41,17 +41,17 @@ export const MultisigContextProvider: React.FC<
error, error,
squads, squads,
upgradeMultisigAccount, upgradeMultisigAccount,
securityMultisigAccount, priceFeedMultisigAccount,
upgradeMultisigProposals, upgradeMultisigProposals,
securityMultisigProposals, priceFeedMultisigProposals,
} = useMultisig(anchorWallet as Wallet) } = useMultisig(anchorWallet as Wallet)
const value = useMemo( const value = useMemo(
() => ({ () => ({
upgradeMultisigAccount, upgradeMultisigAccount,
securityMultisigAccount, priceFeedMultisigAccount,
upgradeMultisigProposals, upgradeMultisigProposals,
securityMultisigProposals, priceFeedMultisigProposals,
isLoading, isLoading,
error, error,
squads, squads,
@ -61,9 +61,9 @@ export const MultisigContextProvider: React.FC<
isLoading, isLoading,
error, error,
upgradeMultisigAccount, upgradeMultisigAccount,
securityMultisigAccount, priceFeedMultisigAccount,
upgradeMultisigProposals, upgradeMultisigProposals,
securityMultisigProposals, priceFeedMultisigProposals,
] ]
) )

View File

@ -14,7 +14,7 @@ export const UPGRADE_MULTISIG: Record<Cluster | 'localnet', PublicKey> = {
localnet: new PublicKey('FVQyHcooAtThJ83XFrNnv74BcinbRH3bRmfFamAHBfuj'), localnet: new PublicKey('FVQyHcooAtThJ83XFrNnv74BcinbRH3bRmfFamAHBfuj'),
} }
export const SECURITY_MULTISIG: Record<Cluster | 'localnet', PublicKey> = { export const PRICE_FEED_MULTISIG: Record<Cluster | 'localnet', PublicKey> = {
'mainnet-beta': new PublicKey('92hQkq8kBgCUcF9yWN8URZB9RTmA4mZpDGtbiAWA74Z8'), // TODO: placeholder value for now, fix when vault is created 'mainnet-beta': new PublicKey('92hQkq8kBgCUcF9yWN8URZB9RTmA4mZpDGtbiAWA74Z8'), // TODO: placeholder value for now, fix when vault is created
testnet: new PublicKey('92hQkq8kBgCUcF9yWN8URZB9RTmA4mZpDGtbiAWA74Z8'), // TODO: placeholder value for now, fix when vault is created testnet: new PublicKey('92hQkq8kBgCUcF9yWN8URZB9RTmA4mZpDGtbiAWA74Z8'), // TODO: placeholder value for now, fix when vault is created
devnet: new PublicKey('92hQkq8kBgCUcF9yWN8URZB9RTmA4mZpDGtbiAWA74Z8'), devnet: new PublicKey('92hQkq8kBgCUcF9yWN8URZB9RTmA4mZpDGtbiAWA74Z8'),
@ -26,9 +26,9 @@ interface MultisigHookData {
error: any // TODO: fix any error: any // TODO: fix any
squads: SquadsMesh | undefined squads: SquadsMesh | undefined
upgradeMultisigAccount: MultisigAccount | undefined upgradeMultisigAccount: MultisigAccount | undefined
securityMultisigAccount: MultisigAccount | undefined priceFeedMultisigAccount: MultisigAccount | undefined
upgradeMultisigProposals: TransactionAccount[] upgradeMultisigProposals: TransactionAccount[]
securityMultisigProposals: TransactionAccount[] priceFeedMultisigProposals: TransactionAccount[]
} }
const getSortedProposals = async ( const getSortedProposals = async (
@ -46,12 +46,12 @@ export const useMultisig = (wallet: Wallet): MultisigHookData => {
const [error, setError] = useState(null) const [error, setError] = useState(null)
const [upgradeMultisigAccount, setUpgradeMultisigAccount] = const [upgradeMultisigAccount, setUpgradeMultisigAccount] =
useState<MultisigAccount>() useState<MultisigAccount>()
const [securityMultisigAccount, setSecurityMultisigAccount] = const [priceFeedMultisigAccount, setpriceFeedMultisigAccount] =
useState<MultisigAccount>() useState<MultisigAccount>()
const [upgradeMultisigProposals, setUpgradeMultisigProposals] = useState< const [upgradeMultisigProposals, setUpgradeMultisigProposals] = useState<
TransactionAccount[] TransactionAccount[]
>([]) >([])
const [securityMultisigProposals, setSecurityMultisigProposals] = useState< const [priceFeedMultisigProposals, setpriceFeedMultisigProposals] = useState<
TransactionAccount[] TransactionAccount[]
>([]) >([])
const [squads, setSquads] = useState<SquadsMesh>() const [squads, setSquads] = useState<SquadsMesh>()
@ -102,13 +102,13 @@ export const useMultisig = (wallet: Wallet): MultisigHookData => {
) )
) )
if (cluster === 'devnet') { if (cluster === 'devnet') {
setSecurityMultisigAccount( setpriceFeedMultisigAccount(
await squads.getMultisig( await squads.getMultisig(
SECURITY_MULTISIG[getMultisigCluster(cluster)] PRICE_FEED_MULTISIG[getMultisigCluster(cluster)]
) )
) )
} else { } else {
setSecurityMultisigAccount(undefined) setpriceFeedMultisigAccount(undefined)
} }
if (cancelled) return if (cancelled) return
setUpgradeMultisigProposals( setUpgradeMultisigProposals(
@ -118,14 +118,14 @@ export const useMultisig = (wallet: Wallet): MultisigHookData => {
) )
) )
if (cluster === 'devnet') { if (cluster === 'devnet') {
setSecurityMultisigProposals( setpriceFeedMultisigProposals(
await getSortedProposals( await getSortedProposals(
squads, squads,
SECURITY_MULTISIG[getMultisigCluster(cluster)] PRICE_FEED_MULTISIG[getMultisigCluster(cluster)]
) )
) )
} else { } else {
setSecurityMultisigProposals([]) setpriceFeedMultisigProposals([])
} }
setSquads(squads) setSquads(squads)
setIsLoading(false) setIsLoading(false)
@ -156,8 +156,8 @@ export const useMultisig = (wallet: Wallet): MultisigHookData => {
error, error,
squads, squads,
upgradeMultisigAccount, upgradeMultisigAccount,
securityMultisigAccount, priceFeedMultisigAccount,
upgradeMultisigProposals, upgradeMultisigProposals,
securityMultisigProposals, priceFeedMultisigProposals,
} }
} }