Переглянути джерело

[xc-admin-frontend] Xc admin minor fixes (#968)

* Simplify refresh logic

* Bump wormhole-sdk version to include new chain names
Mohammad Amin Khashkhashi Moghaddam 2 роки тому
батько
коміт
fbd004f359

+ 1 - 1
governance/xc_admin/packages/xc_admin_common/package.json

@@ -20,7 +20,7 @@
     "test": "jest"
   },
   "dependencies": {
-    "@certusone/wormhole-sdk": "^0.9.8",
+    "@certusone/wormhole-sdk": "^0.9.22",
     "@coral-xyz/anchor": "^0.26.0",
     "@pythnetwork/client": "^2.17.0",
     "@pythnetwork/pyth-sdk-solidity": "*",

+ 37 - 87
governance/xc_admin/packages/xc_admin_frontend/components/tabs/Proposals.tsx

@@ -53,11 +53,9 @@ import {
 import { getMappingCluster, isPubkey } from '../InstructionViews/utils'
 const ProposalRow = ({
   proposal,
-  setCurrentProposalPubkey,
   multisig,
 }: {
   proposal: TransactionAccount
-  setCurrentProposalPubkey: Dispatch<SetStateAction<string | undefined>>
   multisig: MultisigAccount | undefined
 }) => {
   const status = getProposalStatus(proposal, multisig)
@@ -67,7 +65,6 @@ const ProposalRow = ({
   const handleClickIndividualProposal = useCallback(
     (proposalPubkey: string) => {
       router.query.proposal = proposalPubkey
-      setCurrentProposalPubkey(proposalPubkey)
       router.push(
         {
           pathname: router.pathname,
@@ -77,7 +74,7 @@ const ProposalRow = ({
         { scroll: true }
       )
     },
-    [setCurrentProposalPubkey, router]
+    [router]
   )
   return (
     <div
@@ -226,16 +223,11 @@ type ProposalType = 'priceFeed' | 'governance'
 
 const Proposal = ({
   proposal,
-  proposalIndex,
   multisig,
-  proposalType,
 }: {
   proposal: TransactionAccount | undefined
-  proposalIndex: number
   multisig: MultisigAccount | undefined
-  proposalType: ProposalType
 }) => {
-  const [currentProposal, setCurrentProposal] = useState<TransactionAccount>()
   const [instructions, setInstructions] = useState<MultisigInstruction[]>([])
   const [isTransactionLoading, setIsTransactionLoading] = useState(false)
   const { cluster } = useContext(ClusterContext)
@@ -243,38 +235,23 @@ const Proposal = ({
   const {
     voteSquads,
     isLoading: isMultisigLoading,
-    setpriceFeedMultisigProposals,
     connection,
+    refreshData,
   } = useMultisigContext()
   const {
     priceAccountKeyToSymbolMapping,
     productAccountKeyToSymbolMapping,
     publisherKeyToNameMapping,
-    multisigSignerKeyToNameMapping,
   } = usePythContext()
   const publisherKeyToNameMappingCluster =
     publisherKeyToNameMapping[getMappingCluster(cluster)]
   const { publicKey: signerPublicKey } = useWallet()
 
-  useEffect(() => {
-    setCurrentProposal(proposal)
-  }, [proposal])
-
   const proposalStatus = getProposalStatus(proposal, multisig)
 
-  useEffect(() => {
-    // update the priceFeedMultisigProposals with previous value but replace the current proposal with the updated one at the specific index
-    if (currentProposal) {
-      setpriceFeedMultisigProposals((prevProposals: TransactionAccount[]) => {
-        prevProposals.splice(proposalIndex, 1, currentProposal)
-        return [...prevProposals]
-      })
-    }
-  }, [currentProposal, setpriceFeedMultisigProposals, proposalIndex])
-
   const verified =
-    currentProposal &&
-    Object.keys(currentProposal.status)[0] !== 'draft' &&
+    proposal &&
+    Object.keys(proposal.status)[0] !== 'draft' &&
     instructions.length > 0 &&
     instructions.every(
       (ix) =>
@@ -300,27 +277,28 @@ const Proposal = ({
     )
 
   const voted =
-    currentProposal &&
+    proposal &&
     signerPublicKey &&
-    (currentProposal.approved.some(
+    (proposal.approved.some(
       (p) => p.toBase58() === signerPublicKey.toBase58()
     ) ||
-      currentProposal.cancelled.some(
+      proposal.cancelled.some(
         (p) => p.toBase58() === signerPublicKey.toBase58()
       ) ||
-      currentProposal.rejected.some(
+      proposal.rejected.some(
         (p) => p.toBase58() === signerPublicKey.toBase58()
       ))
 
   useEffect(() => {
+    let isCancelled = false
     const fetchInstructions = async () => {
-      if (currentProposal && connection) {
+      if (proposal && connection) {
         const readOnlySquads = new SquadsMesh({
           connection,
           wallet: new NodeWallet(new Keypair()),
         })
         const proposalInstructions = (
-          await getManyProposalsInstructions(readOnlySquads, [currentProposal])
+          await getManyProposalsInstructions(readOnlySquads, [proposal])
         )[0]
         const multisigParser = MultisigParser.fromCluster(
           getMultisigCluster(cluster)
@@ -332,13 +310,16 @@ const Proposal = ({
             keys: ix.keys as AccountMeta[],
           })
         )
-        setInstructions(parsedInstructions)
+        if (!isCancelled) setInstructions(parsedInstructions)
       } else {
-        setInstructions([])
+        if (!isCancelled) setInstructions([])
       }
     }
     fetchInstructions().catch(console.error)
-  }, [cluster, currentProposal, voteSquads, connection])
+    return () => {
+      isCancelled = true
+    }
+  }, [cluster, proposal, voteSquads, connection])
 
   const handleClick = async (
     handler: (squad: SquadsMesh, proposalKey: PublicKey) => any,
@@ -348,19 +329,7 @@ const Proposal = ({
       try {
         setIsTransactionLoading(true)
         await handler(voteSquads, proposal.publicKey)
-        const proposals = await getProposals(
-          voteSquads,
-          proposalType === 'priceFeed'
-            ? PRICE_FEED_MULTISIG[getMultisigCluster(cluster)]
-            : UPGRADE_MULTISIG[getMultisigCluster(cluster)]
-        )
-        setCurrentProposal(
-          proposals.find(
-            (proposal) =>
-              proposal.publicKey.toBase58() ===
-              currentProposal?.publicKey.toBase58()
-          )
-        )
+        if (refreshData) await refreshData().fetchData()
         toast.success(msg)
       } catch (e: any) {
         toast.error(capitalizeFirstLetter(e.message))
@@ -394,7 +363,7 @@ const Proposal = ({
     }, `Cancelled proposal ${proposal?.publicKey.toBase58()}`)
   }
 
-  return currentProposal !== undefined &&
+  return proposal !== undefined &&
     multisig !== undefined &&
     !isMultisigLoading ? (
     <div className="grid grid-cols-3 gap-4">
@@ -417,15 +386,15 @@ const Proposal = ({
         </div>
         <div className="flex justify-between">
           <div>Proposal</div>
-          <CopyPubkey pubkey={currentProposal.publicKey.toBase58()} />
+          <CopyPubkey pubkey={proposal.publicKey.toBase58()} />
         </div>
         <div className="flex justify-between">
           <div>Creator</div>
-          <CopyPubkey pubkey={currentProposal.creator.toBase58()} />
+          <CopyPubkey pubkey={proposal.creator.toBase58()} />
         </div>
         <div className="flex justify-between">
           <div>Multisig</div>
-          <CopyPubkey pubkey={currentProposal.ms.toBase58()} />
+          <CopyPubkey pubkey={proposal.ms.toBase58()} />
         </div>
       </div>
       <div className="col-span-3 my-2 space-y-4 bg-[#1E1B2F] p-4 lg:col-span-1">
@@ -434,17 +403,17 @@ const Proposal = ({
         <div className="grid grid-cols-3 justify-center gap-4 text-center align-middle">
           <div>
             <div className="font-bold">Confirmed</div>
-            <div className="text-lg">{currentProposal.approved.length}</div>
+            <div className="text-lg">{proposal.approved.length}</div>
           </div>
           {proposalStatus === 'active' || proposalStatus === 'rejected' ? (
             <div>
               <div className="font-bold">Rejected</div>
-              <div className="text-lg">{currentProposal.rejected.length}</div>
+              <div className="text-lg">{proposal.rejected.length}</div>
             </div>
           ) : (
             <div>
               <div className="font-bold">Cancelled</div>
-              <div className="text-lg">{currentProposal.cancelled.length}</div>
+              <div className="text-lg">{proposal.cancelled.length}</div>
             </div>
           )}
           <div>
@@ -490,17 +459,14 @@ const Proposal = ({
           </div>
         ) : null}
       </div>
-      {currentProposal.approved.length > 0 && (
-        <AccountList listName="Confirmed" accounts={currentProposal.approved} />
+      {proposal.approved.length > 0 && (
+        <AccountList listName="Confirmed" accounts={proposal.approved} />
       )}
-      {currentProposal.rejected.length > 0 && (
-        <AccountList listName="Rejected" accounts={currentProposal.rejected} />
+      {proposal.rejected.length > 0 && (
+        <AccountList listName="Rejected" accounts={proposal.rejected} />
       )}
-      {currentProposal.cancelled.length > 0 && (
-        <AccountList
-          listName="Cancelled"
-          accounts={currentProposal.cancelled}
-        />
+      {proposal.cancelled.length > 0 && (
+        <AccountList listName="Cancelled" accounts={proposal.cancelled} />
       )}
       <div className="col-span-3 my-2 space-y-4 bg-[#1E1B2F] p-4">
         <h4 className="h4 font-semibold">
@@ -562,11 +528,8 @@ const Proposal = ({
                         <div>Value</div>
                       </div>
                       {Object.keys(instruction.args).map((key, index) => (
-                        <>
-                          <div
-                            key={index}
-                            className="flex justify-between border-t border-beige-300 py-3"
-                          >
+                        <Fragment key={index}>
+                          <div className="flex justify-between border-t border-beige-300 py-3">
                             <div>{key}</div>
                             {instruction.args[key] instanceof PublicKey ? (
                               <CopyPubkey
@@ -597,7 +560,7 @@ const Proposal = ({
                               pubkey={instruction.args[key].toBase58()}
                             />
                           ) : null}
-                        </>
+                        </Fragment>
                       ))}
                     </div>
                   ) : (
@@ -747,7 +710,6 @@ const Proposals = () => {
   const router = useRouter()
   const { connected, publicKey: signerPublicKey } = useWallet()
   const [currentProposal, setCurrentProposal] = useState<TransactionAccount>()
-  const [currentProposalIndex, setCurrentProposalIndex] = useState<number>()
   const [currentProposalPubkey, setCurrentProposalPubkey] = useState<string>()
   const { cluster } = useContext(ClusterContext)
   const { statusFilter } = useContext(StatusFilterContext)
@@ -808,14 +770,8 @@ const Proposals = () => {
       const currProposal = multisigProposals.find(
         (proposal) => proposal.publicKey.toBase58() === currentProposalPubkey
       )
-      const currProposalIndex = multisigProposals.findIndex(
-        (proposal) => proposal.publicKey.toBase58() === currentProposalPubkey
-      )
       setCurrentProposal(currProposal)
-      setCurrentProposalIndex(
-        currProposalIndex === -1 ? undefined : currProposalIndex
-      )
-      if (currProposalIndex === -1) {
+      if (currProposal === undefined) {
         const otherProposals =
           proposalType !== 'priceFeed'
             ? priceFeedMultisigProposals
@@ -916,7 +872,6 @@ const Proposals = () => {
                         <ProposalRow
                           key={proposal.publicKey.toBase58()}
                           proposal={proposal}
-                          setCurrentProposalPubkey={setCurrentProposalPubkey}
                           multisig={multisigAccount}
                         />
                       ))}
@@ -931,7 +886,7 @@ const Proposals = () => {
               )}
             </div>
           </>
-        ) : !isMultisigLoading && currentProposalIndex !== undefined ? (
+        ) : !isMultisigLoading && currentProposal !== undefined ? (
           <>
             <div
               className="max-w-fit cursor-pointer bg-darkGray2 p-3 text-xs font-semibold outline-none transition-colors hover:bg-darkGray3 md:text-base"
@@ -940,12 +895,7 @@ const Proposals = () => {
               &#8592; back to proposals
             </div>
             <div className="relative mt-6">
-              <Proposal
-                proposal={currentProposal}
-                proposalIndex={currentProposalIndex}
-                multisig={multisigAccount}
-                proposalType={proposalType}
-              />
+              <Proposal proposal={currentProposal} multisig={multisigAccount} />
             </div>
           </>
         ) : (

+ 0 - 4
governance/xc_admin/packages/xc_admin_frontend/contexts/MultisigContext.tsx

@@ -16,7 +16,6 @@ const MultisigContext = createContext<MultisigHookData>({
   voteSquads: undefined,
   refreshData: undefined,
   connection: undefined,
-  setpriceFeedMultisigProposals: () => {},
 })
 
 export const useMultisigContext = () => useContext(MultisigContext)
@@ -38,7 +37,6 @@ export const MultisigContextProvider: React.FC<
     upgradeMultisigProposals,
     priceFeedMultisigProposals,
     allProposalsIxsParsed,
-    setpriceFeedMultisigProposals,
     refreshData,
     connection,
   } = useMultisig()
@@ -50,7 +48,6 @@ export const MultisigContextProvider: React.FC<
       upgradeMultisigProposals,
       priceFeedMultisigProposals,
       allProposalsIxsParsed,
-      setpriceFeedMultisigProposals,
       isLoading,
       error,
       proposeSquads,
@@ -68,7 +65,6 @@ export const MultisigContextProvider: React.FC<
       upgradeMultisigProposals,
       priceFeedMultisigProposals,
       allProposalsIxsParsed,
-      setpriceFeedMultisigProposals,
       refreshData,
       connection,
     ]

+ 6 - 10
governance/xc_admin/packages/xc_admin_frontend/hooks/useMultisig.ts

@@ -26,9 +26,6 @@ export interface MultisigHookData {
   allProposalsIxsParsed: MultisigInstruction[][]
   connection?: Connection
   refreshData?: () => { fetchData: () => Promise<void>; cancel: () => void }
-  setpriceFeedMultisigProposals: React.Dispatch<
-    React.SetStateAction<TransactionAccount[]>
-  >
 }
 
 const getSortedProposals = async (
@@ -46,12 +43,12 @@ export const useMultisig = (): MultisigHookData => {
   const [error, setError] = useState(null)
   const [upgradeMultisigAccount, setUpgradeMultisigAccount] =
     useState<MultisigAccount>()
-  const [priceFeedMultisigAccount, setpriceFeedMultisigAccount] =
+  const [priceFeedMultisigAccount, setPriceFeedMultisigAccount] =
     useState<MultisigAccount>()
   const [upgradeMultisigProposals, setUpgradeMultisigProposals] = useState<
     TransactionAccount[]
   >([])
-  const [priceFeedMultisigProposals, setpriceFeedMultisigProposals] = useState<
+  const [priceFeedMultisigProposals, setPriceFeedMultisigProposals] = useState<
     TransactionAccount[]
   >([])
   const [allProposalsIxsParsed, setAllProposalsIxsParsed] = useState<
@@ -109,14 +106,14 @@ export const useMultisig = (): MultisigHookData => {
         )
         try {
           if (cancelled) return
-          setpriceFeedMultisigAccount(
+          setPriceFeedMultisigAccount(
             await readOnlySquads.getMultisig(
               PRICE_FEED_MULTISIG[multisigCluster]
             )
           )
         } catch (e) {
           console.error(e)
-          setpriceFeedMultisigAccount(undefined)
+          setPriceFeedMultisigAccount(undefined)
         }
 
         if (cancelled) return
@@ -131,11 +128,11 @@ export const useMultisig = (): MultisigHookData => {
             readOnlySquads,
             PRICE_FEED_MULTISIG[multisigCluster]
           )
-          setpriceFeedMultisigProposals(sortedPriceFeedMultisigProposals)
+          setPriceFeedMultisigProposals(sortedPriceFeedMultisigProposals)
         } catch (e) {
           console.error(e)
           setAllProposalsIxsParsed([])
-          setpriceFeedMultisigProposals([])
+          setPriceFeedMultisigProposals([])
         }
 
         setIsLoading(false)
@@ -181,6 +178,5 @@ export const useMultisig = (): MultisigHookData => {
     allProposalsIxsParsed,
     refreshData,
     connection,
-    setpriceFeedMultisigProposals,
   }
 }

+ 840 - 19
package-lock.json

@@ -1838,7 +1838,7 @@
       "version": "0.0.0",
       "license": "ISC",
       "dependencies": {
-        "@certusone/wormhole-sdk": "^0.9.8",
+        "@certusone/wormhole-sdk": "^0.9.22",
         "@coral-xyz/anchor": "^0.26.0",
         "@pythnetwork/client": "^2.17.0",
         "@pythnetwork/pyth-sdk-solidity": "*",
@@ -1860,23 +1860,21 @@
       }
     },
     "governance/xc_admin/packages/xc_admin_common/node_modules/@certusone/wormhole-sdk": {
-      "version": "0.9.8",
-      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.9.8.tgz",
-      "integrity": "sha512-Ck93es/4TxsYTVcFxEOQumXlxJm10AHMuDdUzwg+wNGYXLKlHEksrWdEUoeJ0o1HIEnIAT33g0q/bmCq8rlWzg==",
+      "version": "0.9.22",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.9.22.tgz",
+      "integrity": "sha512-4wZFyqqSQBtTq5S42TCrTAircnRjd0t0OZnFRyMe5qtqk96l5iDwIztKBaIccUW+XDXoGfBhSGooW15tH/IpIQ==",
       "dependencies": {
         "@certusone/wormhole-sdk-proto-web": "0.0.6",
         "@certusone/wormhole-sdk-wasm": "^0.0.1",
         "@coral-xyz/borsh": "0.2.6",
-        "@injectivelabs/networks": "^1.0.52",
-        "@injectivelabs/sdk-ts": "1.0.289",
-        "@injectivelabs/utils": "1.0.45",
+        "@mysten/sui.js": "0.32.2",
         "@project-serum/anchor": "^0.25.0",
         "@solana/spl-token": "^0.3.5",
         "@solana/web3.js": "^1.66.2",
-        "@terra-money/terra.js": "^3.1.3",
+        "@terra-money/terra.js": "3.1.9",
         "@xpla/xpla.js": "^0.2.1",
         "algosdk": "^1.15.0",
-        "aptos": "^1.3.16",
+        "aptos": "1.5.0",
         "axios": "^0.24.0",
         "bech32": "^2.0.0",
         "binary-parser": "^2.2.1",
@@ -1884,6 +1882,347 @@
         "elliptic": "^6.5.4",
         "js-base64": "^3.6.1",
         "near-api-js": "^1.0.0"
+      },
+      "optionalDependencies": {
+        "@injectivelabs/networks": "1.10.12",
+        "@injectivelabs/sdk-ts": "1.10.72",
+        "@injectivelabs/utils": "1.10.12"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/amino": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.30.1.tgz",
+      "integrity": "sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/crypto": "^0.30.1",
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/crypto": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.30.1.tgz",
+      "integrity": "sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1",
+        "@noble/hashes": "^1",
+        "bn.js": "^5.2.0",
+        "elliptic": "^6.5.4",
+        "libsodium-wrappers": "^0.7.6"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/encoding": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.30.1.tgz",
+      "integrity": "sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ==",
+      "optional": true,
+      "dependencies": {
+        "base64-js": "^1.3.0",
+        "bech32": "^1.1.4",
+        "readonly-date": "^1.0.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/encoding/node_modules/bech32": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
+      "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==",
+      "optional": true
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/json-rpc": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz",
+      "integrity": "sha512-pitfC/2YN9t+kXZCbNuyrZ6M8abnCC2n62m+JtU9vQUfaEtVsgy+1Fk4TRQ175+pIWSdBMFi2wT8FWVEE4RhxQ==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/stream": "^0.30.1",
+        "xstream": "^11.14.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/math": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.30.1.tgz",
+      "integrity": "sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q==",
+      "optional": true,
+      "dependencies": {
+        "bn.js": "^5.2.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/proto-signing": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.30.1.tgz",
+      "integrity": "sha512-tXh8pPYXV4aiJVhTKHGyeZekjj+K9s2KKojMB93Gcob2DxUjfKapFYBMJSgfKPuWUPEmyr8Q9km2hplI38ILgQ==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/amino": "^0.30.1",
+        "@cosmjs/crypto": "^0.30.1",
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1",
+        "cosmjs-types": "^0.7.1",
+        "long": "^4.0.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/socket": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.30.1.tgz",
+      "integrity": "sha512-r6MpDL+9N+qOS/D5VaxnPaMJ3flwQ36G+vPvYJsXArj93BjgyFB7BwWwXCQDzZ+23cfChPUfhbINOenr8N2Kow==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/stream": "^0.30.1",
+        "isomorphic-ws": "^4.0.1",
+        "ws": "^7",
+        "xstream": "^11.14.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/stargate": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.30.1.tgz",
+      "integrity": "sha512-RdbYKZCGOH8gWebO7r6WvNnQMxHrNXInY/gPHPzMjbQF6UatA6fNM2G2tdgS5j5u7FTqlCI10stNXrknaNdzog==",
+      "optional": true,
+      "dependencies": {
+        "@confio/ics23": "^0.6.8",
+        "@cosmjs/amino": "^0.30.1",
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/proto-signing": "^0.30.1",
+        "@cosmjs/stream": "^0.30.1",
+        "@cosmjs/tendermint-rpc": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1",
+        "cosmjs-types": "^0.7.1",
+        "long": "^4.0.0",
+        "protobufjs": "~6.11.3",
+        "xstream": "^11.14.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/stream": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.30.1.tgz",
+      "integrity": "sha512-Fg0pWz1zXQdoxQZpdHRMGvUH5RqS6tPv+j9Eh7Q953UjMlrwZVo0YFLC8OTf/HKVf10E4i0u6aM8D69Q6cNkgQ==",
+      "optional": true,
+      "dependencies": {
+        "xstream": "^11.14.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/tendermint-rpc": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.30.1.tgz",
+      "integrity": "sha512-Z3nCwhXSbPZJ++v85zHObeUggrEHVfm1u18ZRwXxFE9ZMl5mXTybnwYhczuYOl7KRskgwlB+rID0WYACxj4wdQ==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/crypto": "^0.30.1",
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/json-rpc": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/socket": "^0.30.1",
+        "@cosmjs/stream": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1",
+        "axios": "^0.21.2",
+        "readonly-date": "^1.0.0",
+        "xstream": "^11.14.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/tendermint-rpc/node_modules/axios": {
+      "version": "0.21.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+      "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+      "optional": true,
+      "dependencies": {
+        "follow-redirects": "^1.14.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@cosmjs/utils": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.30.1.tgz",
+      "integrity": "sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g==",
+      "optional": true
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@injectivelabs/sdk-ts": {
+      "version": "1.10.72",
+      "resolved": "https://registry.npmjs.org/@injectivelabs/sdk-ts/-/sdk-ts-1.10.72.tgz",
+      "integrity": "sha512-A5mHNNBgO4fI1c/7CZ0bGfVXliy8laP+VaYZ++aWh1YyudoZw4CTCEmLetZRy7AUU3XcfbHa8sAImRi7db+v6Q==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "@apollo/client": "^3.5.8",
+        "@cosmjs/amino": "^0.30.1",
+        "@cosmjs/proto-signing": "^0.30.1",
+        "@cosmjs/stargate": "^0.30.1",
+        "@ethersproject/bytes": "^5.7.0",
+        "@injectivelabs/core-proto-ts": "^0.0.14",
+        "@injectivelabs/exceptions": "^1.10.12",
+        "@injectivelabs/grpc-web": "^0.0.1",
+        "@injectivelabs/grpc-web-node-http-transport": "^0.0.2",
+        "@injectivelabs/grpc-web-react-native-transport": "^0.0.2",
+        "@injectivelabs/indexer-proto-ts": "1.10.8-rc.4",
+        "@injectivelabs/mito-proto-ts": "1.0.9",
+        "@injectivelabs/networks": "^1.10.12",
+        "@injectivelabs/test-utils": "^1.10.12",
+        "@injectivelabs/token-metadata": "^1.10.42",
+        "@injectivelabs/ts-types": "^1.10.12",
+        "@injectivelabs/utils": "^1.10.12",
+        "@metamask/eth-sig-util": "^4.0.0",
+        "axios": "^0.27.2",
+        "bech32": "^2.0.0",
+        "bip39": "^3.0.4",
+        "cosmjs-types": "^0.7.1",
+        "eth-crypto": "^2.6.0",
+        "ethereumjs-util": "^7.1.4",
+        "ethers": "^5.7.2",
+        "google-protobuf": "^3.21.0",
+        "graphql": "^16.3.0",
+        "http-status-codes": "^2.2.0",
+        "js-sha3": "^0.8.0",
+        "jscrypto": "^1.0.3",
+        "keccak256": "^1.0.6",
+        "link-module-alias": "^1.2.0",
+        "rxjs": "^7.8.0",
+        "secp256k1": "^4.0.3",
+        "shx": "^0.3.2",
+        "snakecase-keys": "^5.4.1"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@injectivelabs/sdk-ts/node_modules/axios": {
+      "version": "0.27.2",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+      "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+      "optional": true,
+      "dependencies": {
+        "follow-redirects": "^1.14.9",
+        "form-data": "^4.0.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@injectivelabs/utils": {
+      "version": "1.10.12",
+      "resolved": "https://registry.npmjs.org/@injectivelabs/utils/-/utils-1.10.12.tgz",
+      "integrity": "sha512-c8al79nxIJgV1cBAdW2TPDGldj/8gm5k0h5TIN/AJs8/AeIjpTwwVGfLY3QvPOpRsxuQ9CjBkTXrAcSL1wwkcw==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "@injectivelabs/exceptions": "^1.10.12",
+        "@injectivelabs/ts-types": "^1.10.12",
+        "axios": "^0.21.1",
+        "bignumber.js": "^9.0.1",
+        "http-status-codes": "^2.2.0",
+        "link-module-alias": "^1.2.0",
+        "shx": "^0.3.2",
+        "snakecase-keys": "^5.1.2",
+        "store2": "^2.12.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@injectivelabs/utils/node_modules/axios": {
+      "version": "0.21.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+      "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+      "optional": true,
+      "dependencies": {
+        "follow-redirects": "^1.14.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@mysten/sui.js": {
+      "version": "0.32.2",
+      "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.32.2.tgz",
+      "integrity": "sha512-/Hm4xkGolJhqj8FvQr7QSHDTlxIvL52mtbOao9f75YjrBh7y1Uh9kbJSY7xiTF1NY9sv6p5hUVlYRJuM0Hvn9A==",
+      "dependencies": {
+        "@mysten/bcs": "0.7.1",
+        "@noble/curves": "^1.0.0",
+        "@noble/hashes": "^1.3.0",
+        "@scure/bip32": "^1.3.0",
+        "@scure/bip39": "^1.2.0",
+        "@suchipi/femver": "^1.0.0",
+        "jayson": "^4.0.0",
+        "rpc-websockets": "^7.5.1",
+        "superstruct": "^1.0.3",
+        "tweetnacl": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@mysten/sui.js/node_modules/@scure/bip39": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
+      "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
+      "dependencies": {
+        "@noble/hashes": "~1.3.0",
+        "@scure/base": "~1.1.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@noble/curves": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
+      "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
+      "dependencies": {
+        "@noble/hashes": "1.3.1"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@noble/hashes": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
+      "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/@scure/bip32": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz",
+      "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==",
+      "dependencies": {
+        "@noble/curves": "~1.1.0",
+        "@noble/hashes": "~1.3.1",
+        "@scure/base": "~1.1.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/aptos": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.5.0.tgz",
+      "integrity": "sha512-N7OuRtU7IYHkDkNx+4QS3g/QQGCp+36KzYn3oXPmT7Kttfuv+UKliQVdjy3cLmwd/DCQSh9ObTovwdxnHjUn0g==",
+      "dependencies": {
+        "@noble/hashes": "1.1.3",
+        "@scure/bip39": "1.1.0",
+        "axios": "0.27.2",
+        "form-data": "4.0.0",
+        "tweetnacl": "1.0.3"
+      },
+      "engines": {
+        "node": ">=11.0.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/aptos/node_modules/@noble/hashes": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz",
+      "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://paulmillr.com/funding/"
+        }
+      ]
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/aptos/node_modules/axios": {
+      "version": "0.27.2",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+      "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+      "dependencies": {
+        "follow-redirects": "^1.14.9",
+        "form-data": "^4.0.0"
       }
     },
     "governance/xc_admin/packages/xc_admin_common/node_modules/axios": {
@@ -1894,6 +2233,16 @@
         "follow-redirects": "^1.14.4"
       }
     },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/cosmjs-types": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.7.2.tgz",
+      "integrity": "sha512-vf2uLyktjr/XVAgEq0DjMxeAWh1yYREe7AMHDKd7EiHVqxBPCaBS+qEEQUkXbR9ndnckqr1sUG8BQhazh4X5lA==",
+      "optional": true,
+      "dependencies": {
+        "long": "^4.0.0",
+        "protobufjs": "~6.11.2"
+      }
+    },
     "governance/xc_admin/packages/xc_admin_common/node_modules/fast-check": {
       "version": "3.10.0",
       "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.10.0.tgz",
@@ -1916,6 +2265,36 @@
         "node": ">=8.0.0"
       }
     },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/jayson": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz",
+      "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==",
+      "dependencies": {
+        "@types/connect": "^3.4.33",
+        "@types/node": "^12.12.54",
+        "@types/ws": "^7.4.4",
+        "commander": "^2.20.3",
+        "delay": "^5.0.0",
+        "es6-promisify": "^5.0.0",
+        "eyes": "^0.1.8",
+        "isomorphic-ws": "^4.0.1",
+        "json-stringify-safe": "^5.0.1",
+        "JSONStream": "^1.3.5",
+        "uuid": "^8.3.2",
+        "ws": "^7.4.5"
+      },
+      "bin": {
+        "jayson": "bin/jayson.js"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/jayson/node_modules/@types/node": {
+      "version": "12.20.55",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
+      "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="
+    },
     "governance/xc_admin/packages/xc_admin_common/node_modules/prettier": {
       "version": "2.8.3",
       "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz",
@@ -1931,6 +2310,32 @@
         "url": "https://github.com/prettier/prettier?sponsor=1"
       }
     },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/protobufjs": {
+      "version": "6.11.3",
+      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
+      "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "@protobufjs/aspromise": "^1.1.2",
+        "@protobufjs/base64": "^1.1.2",
+        "@protobufjs/codegen": "^2.0.4",
+        "@protobufjs/eventemitter": "^1.1.0",
+        "@protobufjs/fetch": "^1.1.0",
+        "@protobufjs/float": "^1.0.2",
+        "@protobufjs/inquire": "^1.1.0",
+        "@protobufjs/path": "^1.1.2",
+        "@protobufjs/pool": "^1.1.0",
+        "@protobufjs/utf8": "^1.1.0",
+        "@types/long": "^4.0.1",
+        "@types/node": ">=13.7.0",
+        "long": "^4.0.0"
+      },
+      "bin": {
+        "pbjs": "bin/pbjs",
+        "pbts": "bin/pbts"
+      }
+    },
     "governance/xc_admin/packages/xc_admin_common/node_modules/pure-rand": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz",
@@ -1947,6 +2352,34 @@
         }
       ]
     },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/superstruct": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.3.tgz",
+      "integrity": "sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==",
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "governance/xc_admin/packages/xc_admin_common/node_modules/ws": {
+      "version": "7.5.9",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+      "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+      "engines": {
+        "node": ">=8.3.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": "^5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
     "governance/xc_admin/packages/xc_admin_frontend": {
       "version": "0.1.0",
       "dependencies": {
@@ -55395,7 +55828,7 @@
     },
     "price_pusher": {
       "name": "@pythnetwork/price-pusher",
-      "version": "5.4.5",
+      "version": "5.4.6",
       "license": "Apache-2.0",
       "dependencies": {
         "@injectivelabs/sdk-ts": "1.10.72",
@@ -106059,7 +106492,7 @@
     "xc_admin_common": {
       "version": "file:governance/xc_admin/packages/xc_admin_common",
       "requires": {
-        "@certusone/wormhole-sdk": "^0.9.8",
+        "@certusone/wormhole-sdk": "^0.9.22",
         "@coral-xyz/anchor": "^0.26.0",
         "@pythnetwork/client": "^2.17.0",
         "@pythnetwork/pyth-sdk-solidity": "*",
@@ -106079,23 +106512,24 @@
       },
       "dependencies": {
         "@certusone/wormhole-sdk": {
-          "version": "0.9.8",
-          "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.9.8.tgz",
-          "integrity": "sha512-Ck93es/4TxsYTVcFxEOQumXlxJm10AHMuDdUzwg+wNGYXLKlHEksrWdEUoeJ0o1HIEnIAT33g0q/bmCq8rlWzg==",
+          "version": "0.9.22",
+          "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.9.22.tgz",
+          "integrity": "sha512-4wZFyqqSQBtTq5S42TCrTAircnRjd0t0OZnFRyMe5qtqk96l5iDwIztKBaIccUW+XDXoGfBhSGooW15tH/IpIQ==",
           "requires": {
             "@certusone/wormhole-sdk-proto-web": "0.0.6",
             "@certusone/wormhole-sdk-wasm": "^0.0.1",
             "@coral-xyz/borsh": "0.2.6",
-            "@injectivelabs/networks": "^1.0.52",
-            "@injectivelabs/sdk-ts": "1.0.289",
-            "@injectivelabs/utils": "1.0.45",
+            "@injectivelabs/networks": "1.10.12",
+            "@injectivelabs/sdk-ts": "1.10.72",
+            "@injectivelabs/utils": "1.10.12",
+            "@mysten/sui.js": "0.32.2",
             "@project-serum/anchor": "^0.25.0",
             "@solana/spl-token": "^0.3.5",
             "@solana/web3.js": "^1.66.2",
-            "@terra-money/terra.js": "^3.1.3",
+            "@terra-money/terra.js": "3.1.9",
             "@xpla/xpla.js": "^0.2.1",
             "algosdk": "^1.15.0",
-            "aptos": "^1.3.16",
+            "aptos": "1.5.0",
             "axios": "^0.24.0",
             "bech32": "^2.0.0",
             "binary-parser": "^2.2.1",
@@ -106105,6 +106539,325 @@
             "near-api-js": "^1.0.0"
           }
         },
+        "@cosmjs/amino": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.30.1.tgz",
+          "integrity": "sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/crypto": "^0.30.1",
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1"
+          }
+        },
+        "@cosmjs/crypto": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.30.1.tgz",
+          "integrity": "sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1",
+            "@noble/hashes": "^1",
+            "bn.js": "^5.2.0",
+            "elliptic": "^6.5.4",
+            "libsodium-wrappers": "^0.7.6"
+          }
+        },
+        "@cosmjs/encoding": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.30.1.tgz",
+          "integrity": "sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ==",
+          "optional": true,
+          "requires": {
+            "base64-js": "^1.3.0",
+            "bech32": "^1.1.4",
+            "readonly-date": "^1.0.0"
+          },
+          "dependencies": {
+            "bech32": {
+              "version": "1.1.4",
+              "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
+              "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==",
+              "optional": true
+            }
+          }
+        },
+        "@cosmjs/json-rpc": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz",
+          "integrity": "sha512-pitfC/2YN9t+kXZCbNuyrZ6M8abnCC2n62m+JtU9vQUfaEtVsgy+1Fk4TRQ175+pIWSdBMFi2wT8FWVEE4RhxQ==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/stream": "^0.30.1",
+            "xstream": "^11.14.0"
+          }
+        },
+        "@cosmjs/math": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.30.1.tgz",
+          "integrity": "sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q==",
+          "optional": true,
+          "requires": {
+            "bn.js": "^5.2.0"
+          }
+        },
+        "@cosmjs/proto-signing": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.30.1.tgz",
+          "integrity": "sha512-tXh8pPYXV4aiJVhTKHGyeZekjj+K9s2KKojMB93Gcob2DxUjfKapFYBMJSgfKPuWUPEmyr8Q9km2hplI38ILgQ==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/amino": "^0.30.1",
+            "@cosmjs/crypto": "^0.30.1",
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1",
+            "cosmjs-types": "^0.7.1",
+            "long": "^4.0.0"
+          }
+        },
+        "@cosmjs/socket": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.30.1.tgz",
+          "integrity": "sha512-r6MpDL+9N+qOS/D5VaxnPaMJ3flwQ36G+vPvYJsXArj93BjgyFB7BwWwXCQDzZ+23cfChPUfhbINOenr8N2Kow==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/stream": "^0.30.1",
+            "isomorphic-ws": "^4.0.1",
+            "ws": "^7",
+            "xstream": "^11.14.0"
+          }
+        },
+        "@cosmjs/stargate": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.30.1.tgz",
+          "integrity": "sha512-RdbYKZCGOH8gWebO7r6WvNnQMxHrNXInY/gPHPzMjbQF6UatA6fNM2G2tdgS5j5u7FTqlCI10stNXrknaNdzog==",
+          "optional": true,
+          "requires": {
+            "@confio/ics23": "^0.6.8",
+            "@cosmjs/amino": "^0.30.1",
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/proto-signing": "^0.30.1",
+            "@cosmjs/stream": "^0.30.1",
+            "@cosmjs/tendermint-rpc": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1",
+            "cosmjs-types": "^0.7.1",
+            "long": "^4.0.0",
+            "protobufjs": "~6.11.3",
+            "xstream": "^11.14.0"
+          }
+        },
+        "@cosmjs/stream": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.30.1.tgz",
+          "integrity": "sha512-Fg0pWz1zXQdoxQZpdHRMGvUH5RqS6tPv+j9Eh7Q953UjMlrwZVo0YFLC8OTf/HKVf10E4i0u6aM8D69Q6cNkgQ==",
+          "optional": true,
+          "requires": {
+            "xstream": "^11.14.0"
+          }
+        },
+        "@cosmjs/tendermint-rpc": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.30.1.tgz",
+          "integrity": "sha512-Z3nCwhXSbPZJ++v85zHObeUggrEHVfm1u18ZRwXxFE9ZMl5mXTybnwYhczuYOl7KRskgwlB+rID0WYACxj4wdQ==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/crypto": "^0.30.1",
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/json-rpc": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/socket": "^0.30.1",
+            "@cosmjs/stream": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1",
+            "axios": "^0.21.2",
+            "readonly-date": "^1.0.0",
+            "xstream": "^11.14.0"
+          },
+          "dependencies": {
+            "axios": {
+              "version": "0.21.4",
+              "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+              "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+              "optional": true,
+              "requires": {
+                "follow-redirects": "^1.14.0"
+              }
+            }
+          }
+        },
+        "@cosmjs/utils": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.30.1.tgz",
+          "integrity": "sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g==",
+          "optional": true
+        },
+        "@injectivelabs/sdk-ts": {
+          "version": "1.10.72",
+          "resolved": "https://registry.npmjs.org/@injectivelabs/sdk-ts/-/sdk-ts-1.10.72.tgz",
+          "integrity": "sha512-A5mHNNBgO4fI1c/7CZ0bGfVXliy8laP+VaYZ++aWh1YyudoZw4CTCEmLetZRy7AUU3XcfbHa8sAImRi7db+v6Q==",
+          "optional": true,
+          "requires": {
+            "@apollo/client": "^3.5.8",
+            "@cosmjs/amino": "^0.30.1",
+            "@cosmjs/proto-signing": "^0.30.1",
+            "@cosmjs/stargate": "^0.30.1",
+            "@ethersproject/bytes": "^5.7.0",
+            "@injectivelabs/core-proto-ts": "^0.0.14",
+            "@injectivelabs/exceptions": "^1.10.12",
+            "@injectivelabs/grpc-web": "^0.0.1",
+            "@injectivelabs/grpc-web-node-http-transport": "^0.0.2",
+            "@injectivelabs/grpc-web-react-native-transport": "^0.0.2",
+            "@injectivelabs/indexer-proto-ts": "1.10.8-rc.4",
+            "@injectivelabs/mito-proto-ts": "1.0.9",
+            "@injectivelabs/networks": "^1.10.12",
+            "@injectivelabs/test-utils": "^1.10.12",
+            "@injectivelabs/token-metadata": "^1.10.42",
+            "@injectivelabs/ts-types": "^1.10.12",
+            "@injectivelabs/utils": "^1.10.12",
+            "@metamask/eth-sig-util": "^4.0.0",
+            "axios": "^0.27.2",
+            "bech32": "^2.0.0",
+            "bip39": "^3.0.4",
+            "cosmjs-types": "^0.7.1",
+            "eth-crypto": "^2.6.0",
+            "ethereumjs-util": "^7.1.4",
+            "ethers": "^5.7.2",
+            "google-protobuf": "^3.21.0",
+            "graphql": "^16.3.0",
+            "http-status-codes": "^2.2.0",
+            "js-sha3": "^0.8.0",
+            "jscrypto": "^1.0.3",
+            "keccak256": "^1.0.6",
+            "link-module-alias": "^1.2.0",
+            "rxjs": "^7.8.0",
+            "secp256k1": "^4.0.3",
+            "shx": "^0.3.2",
+            "snakecase-keys": "^5.4.1"
+          },
+          "dependencies": {
+            "axios": {
+              "version": "0.27.2",
+              "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+              "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+              "optional": true,
+              "requires": {
+                "follow-redirects": "^1.14.9",
+                "form-data": "^4.0.0"
+              }
+            }
+          }
+        },
+        "@injectivelabs/utils": {
+          "version": "1.10.12",
+          "resolved": "https://registry.npmjs.org/@injectivelabs/utils/-/utils-1.10.12.tgz",
+          "integrity": "sha512-c8al79nxIJgV1cBAdW2TPDGldj/8gm5k0h5TIN/AJs8/AeIjpTwwVGfLY3QvPOpRsxuQ9CjBkTXrAcSL1wwkcw==",
+          "optional": true,
+          "requires": {
+            "@injectivelabs/exceptions": "^1.10.12",
+            "@injectivelabs/ts-types": "^1.10.12",
+            "axios": "^0.21.1",
+            "bignumber.js": "^9.0.1",
+            "http-status-codes": "^2.2.0",
+            "link-module-alias": "^1.2.0",
+            "shx": "^0.3.2",
+            "snakecase-keys": "^5.1.2",
+            "store2": "^2.12.0"
+          },
+          "dependencies": {
+            "axios": {
+              "version": "0.21.4",
+              "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+              "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+              "optional": true,
+              "requires": {
+                "follow-redirects": "^1.14.0"
+              }
+            }
+          }
+        },
+        "@mysten/sui.js": {
+          "version": "0.32.2",
+          "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.32.2.tgz",
+          "integrity": "sha512-/Hm4xkGolJhqj8FvQr7QSHDTlxIvL52mtbOao9f75YjrBh7y1Uh9kbJSY7xiTF1NY9sv6p5hUVlYRJuM0Hvn9A==",
+          "requires": {
+            "@mysten/bcs": "0.7.1",
+            "@noble/curves": "^1.0.0",
+            "@noble/hashes": "^1.3.0",
+            "@scure/bip32": "^1.3.0",
+            "@scure/bip39": "^1.2.0",
+            "@suchipi/femver": "^1.0.0",
+            "jayson": "^4.0.0",
+            "rpc-websockets": "^7.5.1",
+            "superstruct": "^1.0.3",
+            "tweetnacl": "^1.0.3"
+          },
+          "dependencies": {
+            "@scure/bip39": {
+              "version": "1.2.1",
+              "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
+              "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
+              "requires": {
+                "@noble/hashes": "~1.3.0",
+                "@scure/base": "~1.1.0"
+              }
+            }
+          }
+        },
+        "@noble/curves": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
+          "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
+          "requires": {
+            "@noble/hashes": "1.3.1"
+          }
+        },
+        "@noble/hashes": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
+          "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA=="
+        },
+        "@scure/bip32": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz",
+          "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==",
+          "requires": {
+            "@noble/curves": "~1.1.0",
+            "@noble/hashes": "~1.3.1",
+            "@scure/base": "~1.1.0"
+          }
+        },
+        "aptos": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.5.0.tgz",
+          "integrity": "sha512-N7OuRtU7IYHkDkNx+4QS3g/QQGCp+36KzYn3oXPmT7Kttfuv+UKliQVdjy3cLmwd/DCQSh9ObTovwdxnHjUn0g==",
+          "requires": {
+            "@noble/hashes": "1.1.3",
+            "@scure/bip39": "1.1.0",
+            "axios": "0.27.2",
+            "form-data": "4.0.0",
+            "tweetnacl": "1.0.3"
+          },
+          "dependencies": {
+            "@noble/hashes": {
+              "version": "1.1.3",
+              "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz",
+              "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A=="
+            },
+            "axios": {
+              "version": "0.27.2",
+              "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+              "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+              "requires": {
+                "follow-redirects": "^1.14.9",
+                "form-data": "^4.0.0"
+              }
+            }
+          }
+        },
         "axios": {
           "version": "0.24.0",
           "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
@@ -106113,6 +106866,16 @@
             "follow-redirects": "^1.14.4"
           }
         },
+        "cosmjs-types": {
+          "version": "0.7.2",
+          "resolved": "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.7.2.tgz",
+          "integrity": "sha512-vf2uLyktjr/XVAgEq0DjMxeAWh1yYREe7AMHDKd7EiHVqxBPCaBS+qEEQUkXbR9ndnckqr1sUG8BQhazh4X5lA==",
+          "optional": true,
+          "requires": {
+            "long": "^4.0.0",
+            "protobufjs": "~6.11.2"
+          }
+        },
         "fast-check": {
           "version": "3.10.0",
           "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.10.0.tgz",
@@ -106122,17 +106885,75 @@
             "pure-rand": "^6.0.0"
           }
         },
+        "jayson": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz",
+          "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==",
+          "requires": {
+            "@types/connect": "^3.4.33",
+            "@types/node": "^12.12.54",
+            "@types/ws": "^7.4.4",
+            "commander": "^2.20.3",
+            "delay": "^5.0.0",
+            "es6-promisify": "^5.0.0",
+            "eyes": "^0.1.8",
+            "isomorphic-ws": "^4.0.1",
+            "json-stringify-safe": "^5.0.1",
+            "JSONStream": "^1.3.5",
+            "uuid": "^8.3.2",
+            "ws": "^7.4.5"
+          },
+          "dependencies": {
+            "@types/node": {
+              "version": "12.20.55",
+              "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
+              "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="
+            }
+          }
+        },
         "prettier": {
           "version": "2.8.3",
           "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz",
           "integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==",
           "dev": true
         },
+        "protobufjs": {
+          "version": "6.11.3",
+          "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
+          "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
+          "optional": true,
+          "requires": {
+            "@protobufjs/aspromise": "^1.1.2",
+            "@protobufjs/base64": "^1.1.2",
+            "@protobufjs/codegen": "^2.0.4",
+            "@protobufjs/eventemitter": "^1.1.0",
+            "@protobufjs/fetch": "^1.1.0",
+            "@protobufjs/float": "^1.0.2",
+            "@protobufjs/inquire": "^1.1.0",
+            "@protobufjs/path": "^1.1.2",
+            "@protobufjs/pool": "^1.1.0",
+            "@protobufjs/utf8": "^1.1.0",
+            "@types/long": "^4.0.1",
+            "@types/node": ">=13.7.0",
+            "long": "^4.0.0"
+          }
+        },
         "pure-rand": {
           "version": "6.0.2",
           "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz",
           "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==",
           "dev": true
+        },
+        "superstruct": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.3.tgz",
+          "integrity": "sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg=="
+        },
+        "ws": {
+          "version": "7.5.9",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+          "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+          "requires": {}
         }
       }
     },