-
Notifications
You must be signed in to change notification settings - Fork 261
Expand file tree
/
Copy pathinitiateNewTransactionTrackingThunk.ts
More file actions
45 lines (39 loc) · 1.8 KB
/
initiateNewTransactionTrackingThunk.ts
File metadata and controls
45 lines (39 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import {createAsyncThunk} from '@reduxjs/toolkit';
import {ethers} from 'ethers';
import {getTransactionTrackerSlice} from '../../../sdkReduxConfig';
import {NewTransactionResponse} from '../registerNewTransaction';
import {TransactionTitle} from '../transactionTitle';
import {transactionTrackerSlicePrefix} from '../transactionTrackerSlice';
import {trySerializeTransaction} from '../trySerializeTransaction';
import {trackPendingTransactionThunk} from './trackPendingTransactionThunk';
/**
* Used for tracking _brand new_ transactions.
*/
export const initiateNewTransactionTrackingThunk = createAsyncThunk<
void,
{
chainId: number;
// NOTE: Using simpler type that TransactionResponse which is not returned when the TX is sent "unchecked".
transactionResponse: NewTransactionResponse;
signerAddress: string;
title: TransactionTitle;
extraData: Record<string, unknown>;
}
>(`${transactionTrackerSlicePrefix}/initiateNewTransactionTracking`, async (arg, {dispatch}) => {
arg.transactionResponse.chainId = arg.chainId; // Recommended by Ethers to specify Chain ID when doing serialization.
const transactionHash = arg.transactionResponse.hash;
dispatch(
getTransactionTrackerSlice().actions.addTransaction({
id: transactionHash,
chainId: arg.chainId,
hash: transactionHash,
signerAddress: ethers.utils.getAddress(arg.signerAddress),
timestampMs: new Date().getTime(),
status: 'Pending',
transactionResponse: trySerializeTransaction(arg.transactionResponse),
title: arg.title,
extraData: arg.extraData,
})
);
dispatch(trackPendingTransactionThunk({transactionHash, chainId: arg.chainId, wait: arg.transactionResponse.wait}));
});