-
Notifications
You must be signed in to change notification settings - Fork 74
Expand file tree
/
Copy pathsequencerInboxActions.ts
More file actions
99 lines (93 loc) · 4.07 KB
/
sequencerInboxActions.ts
File metadata and controls
99 lines (93 loc) · 4.07 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import { Transport, Chain, PrepareTransactionRequestReturnType, PublicClient, Address } from 'viem';
import {
sequencerInboxReadContract,
SequencerInboxReadContractParameters,
SequencerInboxReadContractReturnType,
} from '../sequencerInboxReadContract';
import {
SequencerInboxFunctionName,
sequencerInboxPrepareTransactionRequest,
SequencerInboxPrepareTransactionRequestParameters,
} from '../sequencerInboxPrepareTransactionRequest';
type SequencerInboxReadContractArgs<
TSequencerInbox extends Address | undefined,
TFunctionName extends SequencerInboxFunctionName,
> = TSequencerInbox extends Address
? Omit<SequencerInboxReadContractParameters<TFunctionName>, 'sequencerInbox'> & {
sequencerInbox?: Address;
}
: SequencerInboxReadContractParameters<TFunctionName>;
type SequencerInboxPrepareTransactionRequestArgs<
TSequencerInbox extends Address | undefined,
TFunctionName extends SequencerInboxFunctionName,
> = TSequencerInbox extends Address
? Omit<SequencerInboxPrepareTransactionRequestParameters<TFunctionName>, 'sequencerInbox'> & {
sequencerInbox?: Address;
}
: SequencerInboxPrepareTransactionRequestParameters<TFunctionName>;
export type SequencerInboxActions<
TSequencerInbox extends Address | undefined,
TChain extends Chain | undefined = Chain | undefined,
> = {
sequencerInboxReadContract: <TFunctionName extends SequencerInboxFunctionName>(
args: SequencerInboxReadContractArgs<TSequencerInbox, TFunctionName>,
) => Promise<SequencerInboxReadContractReturnType<TFunctionName>>;
sequencerInboxPrepareTransactionRequest: <TFunctionName extends SequencerInboxFunctionName>(
args: SequencerInboxPrepareTransactionRequestArgs<TSequencerInbox, TFunctionName>,
) => Promise<PrepareTransactionRequestReturnType<TChain> & { chainId: number }>;
};
/**
* Set of actions that can be performed on the sequencerInbox contract through wagmi public client
*
* @param {Object} sequencerInbox - Address of the sequencerInbox core contract
* User can still overrides sequencerInbox address,
* by passing it as an argument to sequencerInboxReadContract/sequencerInboxPrepareTransactionRequest calls
*
* @returns {Function} sequencerInboxActionsWithSequencerInbox - Function passed to client.extends() to extend the public client
*
* @example
* const client = createPublicClient({
* chain: arbitrumOne,
* transport: http(),
* }).extend(sequencerInboxActions(coreContracts.sequencerInbox));
*
* // SequencerInbox is set to `coreContracts.sequencerInbox` for every call
* client.sequencerInboxReadContract({
* functionName: 'inboxAccs',
* });
*
* // Overriding sequencerInbox address for this call only
* client.sequencerInboxReadContract({
* functionName: 'inboxAccs',
* sequencerInbox: contractAddress.anotherSequencerInbox
* });
*/
export function sequencerInboxActions<
TParams extends { sequencerInbox?: Address },
TTransport extends Transport = Transport,
TChain extends Chain | undefined = Chain | undefined,
>({ sequencerInbox }: TParams) {
return function sequencerInboxActionsWithSequencerInbox(
client: PublicClient<TTransport, TChain>,
) {
const sequencerInboxExtensions: SequencerInboxActions<TParams['sequencerInbox'], TChain> = {
sequencerInboxReadContract: <TFunctionName extends SequencerInboxFunctionName>(
args: SequencerInboxReadContractArgs<TParams['sequencerInbox'], TFunctionName>,
) => {
return sequencerInboxReadContract(client, {
...args,
sequencerInbox: args.sequencerInbox || sequencerInbox,
} as SequencerInboxReadContractParameters<TFunctionName>);
},
sequencerInboxPrepareTransactionRequest: <TFunctionName extends SequencerInboxFunctionName>(
args: SequencerInboxPrepareTransactionRequestArgs<TParams['sequencerInbox'], TFunctionName>,
) => {
return sequencerInboxPrepareTransactionRequest(client, {
...args,
sequencerInbox: args.sequencerInbox || sequencerInbox,
} as SequencerInboxPrepareTransactionRequestParameters<TFunctionName>);
},
};
return sequencerInboxExtensions;
};
}