prepareCalls

1function prepareCalls<TAccount>(client, params): Promise<
2 | {
3 chainId: `0x${string}`;
4 data: {
5 callData: `0x${string}`;
6 callGasLimit: `0x${string}`;
7 initCode: `0x${string}`;
8 maxFeePerGas: `0x${string}`;
9 maxPriorityFeePerGas: `0x${string}`;
10 nonce: `0x${string}`;
11 paymasterAndData: `0x${string}`;
12 preVerificationGas: `0x${string}`;
13 sender: `0x${string}`;
14 verificationGasLimit: `0x${string}`;
15 };
16 feePayment: {
17 maxAmount: `0x${string}`;
18 sponsored: boolean;
19 tokenAddress: `0x${string}`;
20 };
21 signatureRequest?: | {
22 data: | string
23 | {
24 raw: `0x${string}`;
25 };
26 rawPayload: `0x${string}`;
27 type: "personal_sign";
28 }
29 | {
30 data: {
31 domain?: {
32 chainId?: number;
33 name?: string;
34 salt?: `0x${string}`;
35 verifyingContract?: `0x${string}`;
36 version?: string;
37 };
38 message: Record<string, unknown>;
39 primaryType: string;
40 types: Record<string, object[]>;
41 };
42 rawPayload: `0x${string}`;
43 type: "eth_signTypedData_v4";
44 };
45 type: "user-operation-v060";
46}
47 | {
48 chainId: `0x${string}`;
49 data: {
50 callData: `0x${string}`;
51 callGasLimit: `0x${string}`;
52 factory?: `0x${string}`;
53 factoryData?: `0x${string}`;
54 maxFeePerGas: `0x${string}`;
55 maxPriorityFeePerGas: `0x${string}`;
56 nonce: `0x${string}`;
57 paymaster?: `0x${string}`;
58 paymasterData?: `0x${string}`;
59 paymasterPostOpGasLimit?: `0x${string}`;
60 paymasterVerificationGasLimit?: `0x${string}`;
61 preVerificationGas: `0x${string}`;
62 sender: `0x${string}`;
63 verificationGasLimit: `0x${string}`;
64 };
65 feePayment: {
66 maxAmount: `0x${string}`;
67 sponsored: boolean;
68 tokenAddress: `0x${string}`;
69 };
70 signatureRequest?: | {
71 data: | string
72 | {
73 raw: `0x${string}`;
74 };
75 rawPayload: `0x${string}`;
76 type: "personal_sign";
77 }
78 | {
79 data: {
80 domain?: {
81 chainId?: number;
82 name?: string;
83 salt?: `0x${string}`;
84 verifyingContract?: `0x${string}`;
85 version?: string;
86 };
87 message: Record<string, unknown>;
88 primaryType: string;
89 types: Record<string, object[]>;
90 };
91 rawPayload: `0x${string}`;
92 type: "eth_signTypedData_v4";
93 };
94 type: "user-operation-v070";
95}
96 | {
97 data: {
98 domain?: {
99 chainId?: number;
100 name?: string;
101 salt?: `0x${string}`;
102 verifyingContract?: `0x${string}`;
103 version?: string;
104 };
105 message: Record<string, unknown>;
106 primaryType: string;
107 types: Record<string, object[]>;
108 };
109 modifiedRequest: {
110 calls: object[];
111 capabilities?: {
112 eip7702Auth?: | true
113 | {
114 account?: `0x${string}`;
115 delegation: "ModularAccountV2" | "0x69007702764179f14F51cdce752f4f775d74E139";
116 };
117 gasParamsOverride?: {
118 callGasLimit?: | `0x${string}`
119 | {
120 multiplier: number;
121 };
122 maxFeePerGas?: | `0x${string}`
123 | {
124 multiplier: number;
125 };
126 maxPriorityFeePerGas?: | `0x${string}`
127 | {
128 multiplier: number;
129 };
130 paymasterPostOpGasLimit?: | `0x${string}`
131 | {
132 multiplier: number;
133 };
134 paymasterVerificationGasLimit?: | `0x${string}`
135 | {
136 multiplier: number;
137 };
138 preVerificationGas?: | `0x${string}`
139 | {
140 multiplier: number;
141 };
142 verificationGasLimit?: | `0x${string}`
143 | {
144 multiplier: number;
145 };
146 };
147 nonceOverride?: {
148 nonceKey: `0x${string}`;
149 };
150 paymasterService?: ({ policyId: string; } | { policyIds: string[]; }) & { onlyEstimation?: boolean | undefined; erc20?: { maxTokenAmount?: `0x${string}` | undefined; tokenAddress: `0x${string}`; preOpSettings: { autoPermit: { ...; }; }; } | { ...; } | { ...; } | { ...; } | undefined; webhookData?: string | undefined; };
151 permissions?: | {
152 context: `0x${string}`;
153 }
154 | {
155 sessionId: `0x${string}`;
156 signature: `0x${string}`;
157 };
158 };
159 chainId: `0x${string}`;
160 from: `0x${string}`;
161 paymasterPermitSignature?: | {
162 data: | `0x${string}`
163 | {
164 r: `0x${string}`;
165 s: `0x${string}`;
166 yParity: `0x${string}`;
167 }
168 | {
169 r: `0x${string}`;
170 s: `0x${string}`;
171 v: `0x${string}`;
172 };
173 type: "secp256k1";
174 }
175 | {
176 data: | `0x${string}`
177 | {
178 r: `0x${string}`;
179 s: `0x${string}`;
180 yParity: `0x${string}`;
181 }
182 | {
183 r: `0x${string}`;
184 s: `0x${string}`;
185 v: `0x${string}`;
186 };
187 type: "ecdsa";
188 };
189 };
190 signatureRequest: {
191 data: {
192 domain?: {
193 chainId?: number;
194 name?: string;
195 salt?: `0x${string}`;
196 verifyingContract?: `0x${string}`;
197 version?: string;
198 };
199 message: Record<string, unknown>;
200 primaryType: string;
201 types: Record<string, object[]>;
202 };
203 rawPayload: `0x${string}`;
204 type: "eth_signTypedData_v4";
205 };
206 type: "paymaster-permit";
207}
208 | {
209 data: (
210 | {
211 chainId: `0x${string}`;
212 data: {
213 callData: `0x${string}`;
214 callGasLimit: `0x${string}`;
215 initCode: `0x${string}`;
216 maxFeePerGas: `0x${string}`;
217 maxPriorityFeePerGas: `0x${string}`;
218 nonce: `0x${string}`;
219 paymasterAndData: `0x${string}`;
220 preVerificationGas: `0x${string}`;
221 sender: `0x${string}`;
222 verificationGasLimit: `0x${string}`;
223 };
224 feePayment: {
225 maxAmount: `0x${string}`;
226 sponsored: boolean;
227 tokenAddress: `0x${string}`;
228 };
229 signatureRequest?: | {
230 data: | string
231 | {
232 raw: `0x${(...)}`;
233 };
234 rawPayload: `0x${string}`;
235 type: "personal_sign";
236 }
237 | {
238 data: {
239 domain?: {
240 chainId?: ...;
241 name?: ...;
242 salt?: ...;
243 verifyingContract?: ...;
244 version?: ...;
245 };
246 message: Record<string, unknown>;
247 primaryType: string;
248 types: Record<string, ...[]>;
249 };
250 rawPayload: `0x${string}`;
251 type: "eth_signTypedData_v4";
252 };
253 type: "user-operation-v060";
254 }
255 | {
256 chainId: `0x${string}`;
257 data: {
258 callData: `0x${string}`;
259 callGasLimit: `0x${string}`;
260 factory?: `0x${string}`;
261 factoryData?: `0x${string}`;
262 maxFeePerGas: `0x${string}`;
263 maxPriorityFeePerGas: `0x${string}`;
264 nonce: `0x${string}`;
265 paymaster?: `0x${string}`;
266 paymasterData?: `0x${string}`;
267 paymasterPostOpGasLimit?: `0x${string}`;
268 paymasterVerificationGasLimit?: `0x${string}`;
269 preVerificationGas: `0x${string}`;
270 sender: `0x${string}`;
271 verificationGasLimit: `0x${string}`;
272 };
273 feePayment: {
274 maxAmount: `0x${string}`;
275 sponsored: boolean;
276 tokenAddress: `0x${string}`;
277 };
278 signatureRequest?: | {
279 data: | string
280 | {
281 raw: `0x${(...)}`;
282 };
283 rawPayload: `0x${string}`;
284 type: "personal_sign";
285 }
286 | {
287 data: {
288 domain?: {
289 chainId?: ...;
290 name?: ...;
291 salt?: ...;
292 verifyingContract?: ...;
293 version?: ...;
294 };
295 message: Record<string, unknown>;
296 primaryType: string;
297 types: Record<string, ...[]>;
298 };
299 rawPayload: `0x${string}`;
300 type: "eth_signTypedData_v4";
301 };
302 type: "user-operation-v070";
303 }
304 | {
305 chainId: `0x${string}`;
306 data: {
307 address: `0x${string}`;
308 nonce: `0x${string}`;
309 };
310 signatureRequest: {
311 rawPayload: `0x${string}`;
312 type: "eip7702Auth";
313 };
314 type: "authorization";
315 })[];
316 type: "array";
317}>;

Defined in: account-kit/wallet-client/src/client/actions/prepareCalls.ts:57

Prepares a set of contract calls for execution by building a user operation. Returns the built user operation and a signature request that needs to be signed before submitting to sendPreparedCalls.

Example

1// Prepare a sponsored user operation call
2const result = await client.prepareCalls({
3 calls: [
4 {
5 to: "0x1234...",
6 data: "0xabcdef...",
7 value: "0x0",
8 },
9 ],
10 capabilities: {
11 paymasterService: { policyId: "your-policy-id" },
12 },
13});

Type Parameters

Type ParameterDefault type

TAccount extends undefined | `0x${string}`

undefined | `0x${string}`

Parameters

ParameterTypeDescription

client

InnerWalletApiClient

The wallet API client to use for the request

params

PrepareCallsParams<TAccount>

Parameters for preparing calls

Returns

Promise< | { chainId: `0x${string}`; data: { callData: `0x${string}`; callGasLimit: `0x${string}`; initCode: `0x${string}`; maxFeePerGas: `0x${string}`; maxPriorityFeePerGas: `0x${string}`; nonce: `0x${string}`; paymasterAndData: `0x${string}`; preVerificationGas: `0x${string}`; sender: `0x${string}`; verificationGasLimit: `0x${string}`; }; feePayment: { maxAmount: `0x${string}`; sponsored: boolean; tokenAddress: `0x${string}`; }; signatureRequest?: | { data: | string | { raw: `0x${string}`; }; rawPayload: `0x${string}`; type: "personal_sign"; } | { data: { domain?: { chainId?: number; name?: string; salt?: `0x${string}`; verifyingContract?: `0x${string}`; version?: string; }; message: Record<string, unknown>; primaryType: string; types: Record<string, object[]>; }; rawPayload: `0x${string}`; type: "eth_signTypedData_v4"; }; type: "user-operation-v060"; } | { chainId: `0x${string}`; data: { callData: `0x${string}`; callGasLimit: `0x${string}`; factory?: `0x${string}`; factoryData?: `0x${string}`; maxFeePerGas: `0x${string}`; maxPriorityFeePerGas: `0x${string}`; nonce: `0x${string}`; paymaster?: `0x${string}`; paymasterData?: `0x${string}`; paymasterPostOpGasLimit?: `0x${string}`; paymasterVerificationGasLimit?: `0x${string}`; preVerificationGas: `0x${string}`; sender: `0x${string}`; verificationGasLimit: `0x${string}`; }; feePayment: { maxAmount: `0x${string}`; sponsored: boolean; tokenAddress: `0x${string}`; }; signatureRequest?: | { data: | string | { raw: `0x${string}`; }; rawPayload: `0x${string}`; type: "personal_sign"; } | { data: { domain?: { chainId?: number; name?: string; salt?: `0x${string}`; verifyingContract?: `0x${string}`; version?: string; }; message: Record<string, unknown>; primaryType: string; types: Record<string, object[]>; }; rawPayload: `0x${string}`; type: "eth_signTypedData_v4"; }; type: "user-operation-v070"; } | { data: { domain?: { chainId?: number; name?: string; salt?: `0x${string}`; verifyingContract?: `0x${string}`; version?: string; }; message: Record<string, unknown>; primaryType: string; types: Record<string, object[]>; }; modifiedRequest: { calls: object[]; capabilities?: { eip7702Auth?: | true | { account?: `0x${string}`; delegation: "ModularAccountV2" | "0x69007702764179f14F51cdce752f4f775d74E139"; }; gasParamsOverride?: { callGasLimit?: | `0x${string}` | { multiplier: number; }; maxFeePerGas?: | `0x${string}` | { multiplier: number; }; maxPriorityFeePerGas?: | `0x${string}` | { multiplier: number; }; paymasterPostOpGasLimit?: | `0x${string}` | { multiplier: number; }; paymasterVerificationGasLimit?: | `0x${string}` | { multiplier: number; }; preVerificationGas?: | `0x${string}` | { multiplier: number; }; verificationGasLimit?: | `0x${string}` | { multiplier: number; }; }; nonceOverride?: { nonceKey: `0x${string}`; }; paymasterService?: ({ policyId: string; } | { policyIds: string[]; }) & { onlyEstimation?: boolean | undefined; erc20?: { maxTokenAmount?: `0x\{string}\` | undefined; tokenAddress: \`0x{string}`; preOpSettings: { autoPermit: { …; }; }; } | { …; } | { …; } | { …; } | undefined; webhookData?: string | undefined; }; permissions?: | { context: `0x${string}`; } | { sessionId: `0x${string}`; signature: `0x${string}`; }; }; chainId: `0x${string}`; from: `0x${string}`; paymasterPermitSignature?: | { data: | `0x${string}` | { r: `0x${string}`; s: `0x${string}`; yParity: `0x${string}`; } | { r: `0x${string}`; s: `0x${string}`; v: `0x${string}`; }; type: "secp256k1"; } | { data: | `0x${string}` | { r: `0x${string}`; s: `0x${string}`; yParity: `0x${string}`; } | { r: `0x${string}`; s: `0x${string}`; v: `0x${string}`; }; type: "ecdsa"; }; }; signatureRequest: { data: { domain?: { chainId?: number; name?: string; salt?: `0x${string}`; verifyingContract?: `0x${string}`; version?: string; }; message: Record<string, unknown>; primaryType: string; types: Record<string, object[]>; }; rawPayload: `0x${string}`; type: "eth_signTypedData_v4"; }; type: "paymaster-permit"; } | { data: ( | { chainId: `0x${string}`; data: { callData: `0x${string}`; callGasLimit: `0x${string}`; initCode: `0x${string}`; maxFeePerGas: `0x${string}`; maxPriorityFeePerGas: `0x${string}`; nonce: `0x${string}`; paymasterAndData: `0x${string}`; preVerificationGas: `0x${string}`; sender: `0x${string}`; verificationGasLimit: `0x${string}`; }; feePayment: { maxAmount: `0x${string}`; sponsored: boolean; tokenAddress: `0x${string}`; }; signatureRequest?: | { data: | string | { raw: `0x${(...)}`; }; rawPayload: `0x${string}`; type: "personal_sign"; } | { data: { domain?: { chainId?: …; name?: …; salt?: …; verifyingContract?: …; version?: …; }; message: Record<string, unknown>; primaryType: string; types: Record<string, …[]>; }; rawPayload: `0x${string}`; type: "eth_signTypedData_v4"; }; type: "user-operation-v060"; } | { chainId: `0x${string}`; data: { callData: `0x${string}`; callGasLimit: `0x${string}`; factory?: `0x${string}`; factoryData?: `0x${string}`; maxFeePerGas: `0x${string}`; maxPriorityFeePerGas: `0x${string}`; nonce: `0x${string}`; paymaster?: `0x${string}`; paymasterData?: `0x${string}`; paymasterPostOpGasLimit?: `0x${string}`; paymasterVerificationGasLimit?: `0x${string}`; preVerificationGas: `0x${string}`; sender: `0x${string}`; verificationGasLimit: `0x${string}`; }; feePayment: { maxAmount: `0x${string}`; sponsored: boolean; tokenAddress: `0x${string}`; }; signatureRequest?: | { data: | string | { raw: `0x${(...)}`; }; rawPayload: `0x${string}`; type: "personal_sign"; } | { data: { domain?: { chainId?: …; name?: …; salt?: …; verifyingContract?: …; version?: …; }; message: Record<string, unknown>; primaryType: string; types: Record<string, …[]>; }; rawPayload: `0x${string}`; type: "eth_signTypedData_v4"; }; type: "user-operation-v070"; } | { chainId: `0x${string}`; data: { address: `0x${string}`; nonce: `0x${string}`; }; signatureRequest: { rawPayload: `0x${string}`; type: "eip7702Auth"; }; type: "authorization"; })[]; type: "array"; }>

A Promise that resolves to the prepared calls result containing the user operation data and signature request