Skip to content

Commit

Permalink
Merge pull request #98 from TalismanSociety/fix/missing-pending-tx
Browse files Browse the repository at this point in the history
fix: missing pending tx
  • Loading branch information
chrisling-dev authored Nov 22, 2024
2 parents 8ee7e92 + a326014 commit d3e00b9
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 23 deletions.
34 changes: 25 additions & 9 deletions apps/multisig/src/domains/multisig/usePendingTransactions.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
import { useState, useEffect, useMemo } from 'react'
import { useMemo } from 'react'
import { allRawPendingTransactionsSelector, RawPendingTransaction } from '@domains/chains/storage-getters'
import { tempCalldataState, extrinsicToDecoded } from '@domains/multisig'
import { useRecoilValue, useRecoilValueLoadable } from 'recoil'
import useGetTxsMetadataByTimepoints from '@domains/offchain-data/metadata/hooks/useGetTxsMetadataByTimepoints'
import { Timepoint, Transaction } from '@domains/offchain-data/metadata/types'
import { makeTransactionID } from '@util/misc'
import { pjsApiSelector } from '@domains/chains/pjs-api'
import { useSelectedMultisig } from '@domains/multisig'
import { decodeCallData } from '@domains/chains'
import { allChainTokensSelector } from '@domains/chains'
import useGetTxsMetadata from '@domains/offchain-data/metadata/hooks/useGetTxsMetadata'

type RawPendingTransactionWithId = RawPendingTransaction & { id: string }

const usePendingTransactions = () => {
const [allRawPendingTransactions, setAllRawPendingTransactions] = useState<RawPendingTransaction[]>([])
const [
{
chain: { id: chainId, genesisHash },
},
] = useSelectedMultisig()
const allRawPendingTransactionsLoadable = useRecoilValueLoadable(allRawPendingTransactionsSelector)

useEffect(() => {
const allRawPendingTransactions = useMemo(() => {
if (allRawPendingTransactionsLoadable.state === 'hasValue') {
setAllRawPendingTransactions(allRawPendingTransactionsLoadable.contents)
return allRawPendingTransactionsLoadable.contents
}
}, [allRawPendingTransactionsLoadable])
return []
}, [allRawPendingTransactionsLoadable.contents, allRawPendingTransactionsLoadable.state])

const { timepoints, rawPendingTransactionsWithId } = allRawPendingTransactions.reduce(
const { rawPendingTransactionsWithId } = allRawPendingTransactions.reduce(
(acc, rawPending) => {
const timepoint_height = rawPending.onChainMultisig.when.height.toNumber()
const timepoint_index = rawPending.onChainMultisig.when.index.toNumber()
Expand All @@ -48,7 +48,7 @@ const usePendingTransactions = () => {
},
{ timepoints: [] as Timepoint[], rawPendingTransactionsWithId: [] as RawPendingTransactionWithId[] }
)
const { data, isLoading, isError } = useGetTxsMetadataByTimepoints({ timepoints })
const { data, isLoading, isError } = useGetTxsMetadata()

const tempCalldata = useRecoilValue(tempCalldataState)
const pjsApi = useRecoilValue(pjsApiSelector(genesisHash))
Expand All @@ -65,7 +65,12 @@ const usePendingTransactions = () => {
for (const rawPending of rawPendingTransactionsWithId) {
try {
const { id } = rawPending
const metadata = data?.find(txMeta => txMeta.extrinsicId === id)
const metadata = data?.find(txMeta => {
const extrinsic = decodeCallData(pjsApi, txMeta.callData)
return (
txMeta.extrinsicId === id || pjsApi.registry.hash(extrinsic?.method.toU8a()).toHex() === rawPending.callHash
)
})

let calldata = metadata?.callData ?? tempCalldata[id]

Expand Down Expand Up @@ -105,6 +110,17 @@ const usePendingTransactions = () => {
metadataSaved: true,
...decoded,
})
} else {
_transactions.push({
date: rawPending.date,
hash: rawPending.callHash,
rawPending: rawPending,
multisig: rawPending.multisig,
approvals: rawPending.approvals,
id,
metadataSaved: false,
description: `Unknown transaction @ ${rawPending.id}`,
})
}
} catch (e) {
console.error(`Failed to create transaction from rawPendingTransaction ${rawPending.id}:`, e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,21 @@ import { useSelectedMultisig } from '@domains/multisig'
import { TxMetadata, RawTxMetadata } from '@domains/offchain-data/metadata/types'
import { TXS_METADATA_BY_TIMEPOINTS } from '@domains/offchain-data/metadata/queries'
import { parseTxMetadata } from '../utils'
import { Timepoint } from '@domains/offchain-data/metadata/types'

const fetchGraphQLData = async ({
teamId,
timepoints,
chainId,
signedInAccount,
}: {
teamId: string
timepoints: Timepoint[]

chainId: string
signedInAccount: SignedInAccount
}): Promise<TxMetadata[]> => {
try {
const { data } = await requestSignetBackend<{ tx_metadata: RawTxMetadata[] }>(
TXS_METADATA_BY_TIMEPOINTS,
{ teamId, chainId, timepoints },
{ teamId, chainId },
signedInAccount
)
const txMetadataList: TxMetadata[] = []
Expand All @@ -44,22 +42,21 @@ const fetchGraphQLData = async ({
}
}

const useGetTxsMetadataByTimepoints = ({ timepoints }: { timepoints: Timepoint[] }) => {
const useGetTxsMetadata = () => {
const selectedAccount = useRecoilValue(selectedAccountState)
const [selectedMultisig] = useSelectedMultisig()

return useQuery({
queryKey: ['txMetadataByTimepoints', selectedMultisig.id, timepoints],
queryKey: ['txMetadataByTimepoints', selectedMultisig.id],
queryFn: async () =>
fetchGraphQLData({
teamId: selectedMultisig.id,
timepoints,
chainId: selectedMultisig.chain.id,
signedInAccount: selectedAccount!,
}),
enabled: !!selectedAccount && timepoints.length > 0,
enabled: !!selectedAccount,
placeholderData: keepPreviousData,
})
}

export default useGetTxsMetadataByTimepoints
export default useGetTxsMetadata
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { gql } from 'graphql-tag'

export const TXS_METADATA_BY_TIMEPOINTS = gql`
query TxMetadataByTimepoints($teamId: uuid!, $chainId: String!, $timepoints: [tx_metadata_bool_exp!]!) {
tx_metadata(
where: { team_id: { _eq: $teamId }, chain: { _eq: $chainId }, _or: $timepoints }
order_by: { created: desc }
) {
query TxMetadataByTimepoints($teamId: uuid!, $chainId: String!) {
tx_metadata(where: { team_id: { _eq: $teamId }, chain: { _eq: $chainId } }, order_by: { created: desc }) {
team_id
timepoint_height
timepoint_index
Expand Down

0 comments on commit d3e00b9

Please sign in to comment.