Skip to content

Commit

Permalink
fix: do not discard exceptions of getting redpacket histories (#11397)
Browse files Browse the repository at this point in the history
  • Loading branch information
UncleBill authored and guanbinrui committed Feb 18, 2024
1 parent d117bfe commit 2a4eaf1
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 56 deletions.
68 changes: 32 additions & 36 deletions packages/web3-providers/src/Chainbase/apis/RedPacketAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,45 +20,41 @@ class ChainbaseRedPacketAPI implements RedPacketBaseAPI.Provider<ChainId, Schema
contractAddress: string,
methodId: string,
): Promise<Array<Transaction<ChainId, SchemaType>> | undefined> {
try {
const txes = await asyncIteratorToArray(
pageableToIterator(async (indicator) => {
const { records } = await fetchJSON<{ records: { data: { result: Tx[] } } }>(
urlcat(TRANSACTIONS_BY_CONTRACT_METHOD_ENDPOINT, {
senderAddress,
contractAddress,
chainId,
methodId: `${methodId}%`, // '%' for sql string match.
size: MAX_SIZE_PER_PAGE,
offset: Number(indicator?.id ?? 0) * MAX_SIZE_PER_PAGE,
}),
)
const txes = await asyncIteratorToArray(
pageableToIterator(async (indicator) => {
const { records } = await fetchJSON<{ records: { data: { result: Tx[] } } }>(
urlcat(TRANSACTIONS_BY_CONTRACT_METHOD_ENDPOINT, {
senderAddress,
contractAddress,
chainId,
methodId: `${methodId}%`, // '%' for sql string match.
size: MAX_SIZE_PER_PAGE,
offset: Number(indicator?.id ?? 0) * MAX_SIZE_PER_PAGE,
}),
)

return createPageable(
records.data.result,
createIndicator(indicator),
records.data.result.length === 0 ? undefined : createNextIndicator(indicator),
)
}),
)
return createPageable(
records.data.result,
createIndicator(indicator),
records.data.result.length === 0 ? undefined : createNextIndicator(indicator),
)
}),
)

if (!txes?.length) return
if (!txes?.length) return

return txes
.sort((a, b) => new Date(b.block_timestamp).getTime() - new Date(a.block_timestamp).getTime())
.map((x) => {
return {
input: x.input,
to: x.to_address,
from: x.from_address,
hash: x.transaction_hash,
chainId,
blockNumber: Number(x.block_number),
} as Transaction<ChainId, SchemaType>
})
} catch {
return
}
return txes
.sort((a, b) => new Date(b.block_timestamp).getTime() - new Date(a.block_timestamp).getTime())
.map((x) => {
return {
input: x.input,
to: x.to_address,
from: x.from_address,
hash: x.transaction_hash,
chainId,
blockNumber: Number(x.block_number),
} as Transaction<ChainId, SchemaType>
})
}
}
export const ChainbaseRedPacket = new ChainbaseRedPacketAPI()
36 changes: 16 additions & 20 deletions packages/web3-providers/src/Etherscan/apis/RedPacketAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,24 @@ class EtherscanRedPacketAPI implements RedPacketBaseAPI.Provider<ChainId, Schema
): Promise<Array<Transaction<ChainId, SchemaType>> | undefined> {
if (!senderAddress || !contractAddress || !startBlock || !endBlock || !methodId) return

try {
const { result } = await fetchJSON<{ result: Array<Transaction<ChainId, SchemaType>> }>(
urlcat(EtherscanURL.from(chainId), {
action: 'txlist',
module: 'account',
sort: 'desc',
startBlock,
endBlock,
address: contractAddress,
chain_id: chainId,
}),
)
const { result } = await fetchJSON<{ result: Array<Transaction<ChainId, SchemaType>> }>(
urlcat(EtherscanURL.from(chainId), {
action: 'txlist',
module: 'account',
sort: 'desc',
startBlock,
endBlock,
address: contractAddress,
chain_id: chainId,
}),
)

if (!result) return
if (!result) return

methodId = methodId.toLowerCase()
return result
.filter((x) => x.methodId?.toLowerCase() === methodId && isSameAddress(x.from, senderAddress))
.map((x) => ({ ...x, chainId }))
} catch {
return
}
methodId = methodId.toLowerCase()
return result
.filter((x) => x.methodId?.toLowerCase() === methodId && isSameAddress(x.from, senderAddress))
.map((x) => ({ ...x, chainId }))
}
}
export const EtherscanRedPacket = new EtherscanRedPacketAPI()

0 comments on commit 2a4eaf1

Please sign in to comment.