@t402/evm 2.6.1 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/cjs/constants-05D7IZJA.d.ts +136 -0
  2. package/dist/cjs/permit2/index.d.ts +1 -137
  3. package/dist/cjs/permit2-proxy/client/index.d.ts +83 -0
  4. package/dist/cjs/permit2-proxy/client/index.js +182 -0
  5. package/dist/cjs/permit2-proxy/client/index.js.map +1 -0
  6. package/dist/cjs/permit2-proxy/facilitator/index.d.ts +93 -0
  7. package/dist/cjs/permit2-proxy/facilitator/index.js +368 -0
  8. package/dist/cjs/permit2-proxy/facilitator/index.js.map +1 -0
  9. package/dist/cjs/permit2-proxy/index.d.ts +344 -0
  10. package/dist/cjs/permit2-proxy/index.js +1274 -0
  11. package/dist/cjs/permit2-proxy/index.js.map +1 -0
  12. package/dist/cjs/permit2-proxy/server/index.d.ts +130 -0
  13. package/dist/cjs/permit2-proxy/server/index.js +695 -0
  14. package/dist/cjs/permit2-proxy/server/index.js.map +1 -0
  15. package/dist/esm/chunk-A2U6NWHQ.mjs +199 -0
  16. package/dist/esm/chunk-A2U6NWHQ.mjs.map +1 -0
  17. package/dist/esm/chunk-HUUYTNV2.mjs +138 -0
  18. package/dist/esm/chunk-HUUYTNV2.mjs.map +1 -0
  19. package/dist/esm/chunk-THXENBBU.mjs +251 -0
  20. package/dist/esm/chunk-THXENBBU.mjs.map +1 -0
  21. package/dist/esm/chunk-UK2POASM.mjs +204 -0
  22. package/dist/esm/chunk-UK2POASM.mjs.map +1 -0
  23. package/dist/esm/constants-05D7IZJA.d.mts +136 -0
  24. package/dist/esm/permit2/index.d.mts +1 -137
  25. package/dist/esm/permit2-proxy/client/index.d.mts +83 -0
  26. package/dist/esm/permit2-proxy/client/index.mjs +12 -0
  27. package/dist/esm/permit2-proxy/client/index.mjs.map +1 -0
  28. package/dist/esm/permit2-proxy/facilitator/index.d.mts +93 -0
  29. package/dist/esm/permit2-proxy/facilitator/index.mjs +12 -0
  30. package/dist/esm/permit2-proxy/facilitator/index.mjs.map +1 -0
  31. package/dist/esm/permit2-proxy/index.d.mts +344 -0
  32. package/dist/esm/permit2-proxy/index.mjs +45 -0
  33. package/dist/esm/permit2-proxy/index.mjs.map +1 -0
  34. package/dist/esm/permit2-proxy/server/index.d.mts +130 -0
  35. package/dist/esm/permit2-proxy/server/index.mjs +13 -0
  36. package/dist/esm/permit2-proxy/server/index.mjs.map +1 -0
  37. package/package.json +43 -3
@@ -0,0 +1,251 @@
1
+ import {
2
+ SCHEME_PERMIT2_PROXY,
3
+ T402_EXACT_PERMIT2_PROXY,
4
+ T402_UPTO_PERMIT2_PROXY,
5
+ permit2ProxyExactABI
6
+ } from "./chunk-UK2POASM.mjs";
7
+ import {
8
+ PERMIT2_ADDRESS,
9
+ erc20BalanceABI
10
+ } from "./chunk-URG4HEYQ.mjs";
11
+ import {
12
+ __publicField
13
+ } from "./chunk-NSSMTXJJ.mjs";
14
+
15
+ // src/permit2-proxy/facilitator/scheme.ts
16
+ import { getAddress } from "viem";
17
+ var Permit2ProxyEvmScheme = class {
18
+ /**
19
+ * Creates a new Permit2 Proxy facilitator instance.
20
+ *
21
+ * @param signer - The facilitator EVM signer
22
+ * @param config - Optional configuration
23
+ */
24
+ constructor(signer, config = {}) {
25
+ this.signer = signer;
26
+ __publicField(this, "scheme", SCHEME_PERMIT2_PROXY);
27
+ __publicField(this, "caipFamily", "eip155:*");
28
+ __publicField(this, "exactProxyAddress");
29
+ __publicField(this, "uptoProxyAddress");
30
+ this.exactProxyAddress = config.exactProxyAddress || T402_EXACT_PERMIT2_PROXY;
31
+ this.uptoProxyAddress = config.uptoProxyAddress || T402_UPTO_PERMIT2_PROXY;
32
+ }
33
+ /**
34
+ * Get mechanism-specific extra data for supported kinds.
35
+ *
36
+ * @param _ - The network identifier
37
+ * @returns Extra data including proxy contract addresses
38
+ */
39
+ getExtra(_) {
40
+ return {
41
+ permit2Address: PERMIT2_ADDRESS,
42
+ exactProxyAddress: this.exactProxyAddress,
43
+ uptoProxyAddress: this.uptoProxyAddress
44
+ };
45
+ }
46
+ /**
47
+ * Get signer addresses for this facilitator.
48
+ *
49
+ * @param _ - The network identifier
50
+ * @returns Array of signer addresses
51
+ */
52
+ getSigners(_) {
53
+ return [...this.signer.getAddresses()];
54
+ }
55
+ /**
56
+ * Verify a Permit2 Proxy payment payload.
57
+ *
58
+ * @param payload - The payment payload to verify
59
+ * @param requirements - The payment requirements
60
+ * @returns Verification result
61
+ */
62
+ async verify(payload, requirements) {
63
+ const proxyPayload = payload.payload;
64
+ if (!proxyPayload?.permit?.permitted?.token || !proxyPayload?.owner || !proxyPayload?.witness) {
65
+ return {
66
+ isValid: false,
67
+ invalidReason: "invalid_payload_structure",
68
+ payer: void 0
69
+ };
70
+ }
71
+ if (payload.accepted.scheme !== SCHEME_PERMIT2_PROXY || requirements.scheme !== SCHEME_PERMIT2_PROXY) {
72
+ return {
73
+ isValid: false,
74
+ invalidReason: "unsupported_scheme",
75
+ payer: proxyPayload.owner
76
+ };
77
+ }
78
+ if (payload.accepted.network !== requirements.network) {
79
+ return {
80
+ isValid: false,
81
+ invalidReason: "network_mismatch",
82
+ payer: proxyPayload.owner
83
+ };
84
+ }
85
+ if (getAddress(proxyPayload.permit.permitted.token) !== getAddress(requirements.asset)) {
86
+ return {
87
+ isValid: false,
88
+ invalidReason: "token_mismatch",
89
+ payer: proxyPayload.owner
90
+ };
91
+ }
92
+ if (getAddress(proxyPayload.witness.to) !== getAddress(requirements.payTo)) {
93
+ return {
94
+ isValid: false,
95
+ invalidReason: "recipient_mismatch",
96
+ payer: proxyPayload.owner
97
+ };
98
+ }
99
+ const signerAddresses = this.signer.getAddresses().map((a) => getAddress(a));
100
+ if (!signerAddresses.includes(getAddress(proxyPayload.witness.facilitator))) {
101
+ return {
102
+ isValid: false,
103
+ invalidReason: "facilitator_mismatch",
104
+ payer: proxyPayload.owner
105
+ };
106
+ }
107
+ const now = Math.floor(Date.now() / 1e3);
108
+ if (BigInt(proxyPayload.permit.deadline) < BigInt(now + 6)) {
109
+ return {
110
+ isValid: false,
111
+ invalidReason: "permit_expired",
112
+ payer: proxyPayload.owner
113
+ };
114
+ }
115
+ if (BigInt(proxyPayload.witness.validAfter) > BigInt(now)) {
116
+ return {
117
+ isValid: false,
118
+ invalidReason: "payment_too_early",
119
+ payer: proxyPayload.owner
120
+ };
121
+ }
122
+ if (BigInt(proxyPayload.permit.permitted.amount) < BigInt(requirements.amount)) {
123
+ return {
124
+ isValid: false,
125
+ invalidReason: "insufficient_permitted_amount",
126
+ payer: proxyPayload.owner
127
+ };
128
+ }
129
+ try {
130
+ const balance = await this.signer.readContract({
131
+ address: getAddress(requirements.asset),
132
+ abi: erc20BalanceABI,
133
+ functionName: "balanceOf",
134
+ args: [getAddress(proxyPayload.owner)]
135
+ });
136
+ if (BigInt(balance) < BigInt(requirements.amount)) {
137
+ return {
138
+ isValid: false,
139
+ invalidReason: "insufficient_funds",
140
+ payer: proxyPayload.owner
141
+ };
142
+ }
143
+ } catch (error) {
144
+ const errorMessage = error instanceof Error ? error.message : String(error);
145
+ return {
146
+ isValid: false,
147
+ invalidReason: `balance_check_failed: ${errorMessage}`,
148
+ payer: proxyPayload.owner
149
+ };
150
+ }
151
+ return {
152
+ isValid: true,
153
+ invalidReason: void 0,
154
+ payer: proxyPayload.owner
155
+ };
156
+ }
157
+ /**
158
+ * Settle a Permit2 Proxy payment by calling settle() on the proxy contract.
159
+ *
160
+ * @param payload - The payment payload
161
+ * @param requirements - The payment requirements
162
+ * @returns Settlement result
163
+ */
164
+ async settle(payload, requirements) {
165
+ const proxyPayload = payload.payload;
166
+ if (!proxyPayload?.permit?.permitted?.token || !proxyPayload?.owner || !proxyPayload?.witness) {
167
+ return {
168
+ success: false,
169
+ network: payload.accepted.network,
170
+ transaction: "",
171
+ errorReason: "invalid_payload_structure",
172
+ payer: void 0
173
+ };
174
+ }
175
+ const valid = await this.verify(payload, requirements);
176
+ if (!valid.isValid) {
177
+ return {
178
+ success: false,
179
+ network: payload.accepted.network,
180
+ transaction: "",
181
+ errorReason: valid.invalidReason ?? "invalid_scheme",
182
+ payer: proxyPayload.owner
183
+ };
184
+ }
185
+ try {
186
+ const proxyAddress = requirements.extra?.exactProxyAddress || this.exactProxyAddress;
187
+ const tx = await this.signer.writeContract({
188
+ address: proxyAddress,
189
+ abi: permit2ProxyExactABI,
190
+ functionName: "settle",
191
+ args: [
192
+ {
193
+ permitted: {
194
+ token: getAddress(proxyPayload.permit.permitted.token),
195
+ amount: BigInt(proxyPayload.permit.permitted.amount)
196
+ },
197
+ nonce: BigInt(proxyPayload.permit.nonce),
198
+ deadline: BigInt(proxyPayload.permit.deadline)
199
+ },
200
+ getAddress(proxyPayload.owner),
201
+ {
202
+ to: getAddress(proxyPayload.witness.to),
203
+ facilitator: getAddress(proxyPayload.witness.facilitator),
204
+ validAfter: BigInt(proxyPayload.witness.validAfter)
205
+ },
206
+ proxyPayload.signature
207
+ ]
208
+ });
209
+ const receipt = await this.signer.waitForTransactionReceipt({ hash: tx });
210
+ if (receipt.status !== "success") {
211
+ return {
212
+ success: false,
213
+ errorReason: "invalid_transaction_state",
214
+ transaction: tx,
215
+ network: payload.accepted.network,
216
+ payer: proxyPayload.owner
217
+ };
218
+ }
219
+ return {
220
+ success: true,
221
+ transaction: tx,
222
+ network: payload.accepted.network,
223
+ payer: proxyPayload.owner
224
+ };
225
+ } catch (error) {
226
+ console.error("Failed to settle Permit2 Proxy transaction:", error);
227
+ return {
228
+ success: false,
229
+ errorReason: "transaction_failed",
230
+ transaction: "",
231
+ network: payload.accepted.network,
232
+ payer: proxyPayload.owner
233
+ };
234
+ }
235
+ }
236
+ };
237
+
238
+ // src/permit2-proxy/facilitator/register.ts
239
+ function registerPermit2ProxyEvmScheme(facilitator, config) {
240
+ facilitator.register(
241
+ config.networks,
242
+ new Permit2ProxyEvmScheme(config.signer, config.schemeConfig)
243
+ );
244
+ return facilitator;
245
+ }
246
+
247
+ export {
248
+ Permit2ProxyEvmScheme,
249
+ registerPermit2ProxyEvmScheme
250
+ };
251
+ //# sourceMappingURL=chunk-THXENBBU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/permit2-proxy/facilitator/scheme.ts","../../src/permit2-proxy/facilitator/register.ts"],"sourcesContent":["import {\n PaymentPayload,\n PaymentRequirements,\n SchemeNetworkFacilitator,\n SettleResponse,\n VerifyResponse,\n} from \"@t402/core/types\";\nimport { getAddress } from \"viem\";\nimport { FacilitatorEvmSigner } from \"../../signer\";\nimport { Permit2ProxyPayloadV2 } from \"../types\";\nimport {\n PERMIT2_ADDRESS,\n SCHEME_PERMIT2_PROXY,\n T402_EXACT_PERMIT2_PROXY,\n T402_UPTO_PERMIT2_PROXY,\n erc20BalanceABI,\n permit2ProxyExactABI,\n} from \"../constants\";\n\n/**\n * Configuration for Permit2 Proxy EVM facilitator\n */\nexport interface Permit2ProxyEvmSchemeConfig {\n /** Override exact proxy contract address */\n exactProxyAddress?: `0x${string}`;\n /** Override upto proxy contract address */\n uptoProxyAddress?: `0x${string}`;\n [key: string]: unknown;\n}\n\n/**\n * EVM facilitator implementation for the Permit2 Proxy payment scheme.\n *\n * Verifies Permit2 witness-based signatures and settles payments by calling\n * settle() on the T402 proxy contracts.\n */\nexport class Permit2ProxyEvmScheme implements SchemeNetworkFacilitator {\n readonly scheme = SCHEME_PERMIT2_PROXY;\n readonly caipFamily = \"eip155:*\";\n private exactProxyAddress: `0x${string}`;\n private uptoProxyAddress: `0x${string}`;\n\n /**\n * Creates a new Permit2 Proxy facilitator instance.\n *\n * @param signer - The facilitator EVM signer\n * @param config - Optional configuration\n */\n constructor(\n private readonly signer: FacilitatorEvmSigner,\n config: Permit2ProxyEvmSchemeConfig = {},\n ) {\n this.exactProxyAddress = config.exactProxyAddress || T402_EXACT_PERMIT2_PROXY;\n this.uptoProxyAddress = config.uptoProxyAddress || T402_UPTO_PERMIT2_PROXY;\n }\n\n /**\n * Get mechanism-specific extra data for supported kinds.\n *\n * @param _ - The network identifier\n * @returns Extra data including proxy contract addresses\n */\n getExtra(_: string): Record<string, unknown> | undefined {\n return {\n permit2Address: PERMIT2_ADDRESS,\n exactProxyAddress: this.exactProxyAddress,\n uptoProxyAddress: this.uptoProxyAddress,\n };\n }\n\n /**\n * Get signer addresses for this facilitator.\n *\n * @param _ - The network identifier\n * @returns Array of signer addresses\n */\n getSigners(_: string): string[] {\n return [...this.signer.getAddresses()];\n }\n\n /**\n * Verify a Permit2 Proxy payment payload.\n *\n * @param payload - The payment payload to verify\n * @param requirements - The payment requirements\n * @returns Verification result\n */\n async verify(\n payload: PaymentPayload,\n requirements: PaymentRequirements,\n ): Promise<VerifyResponse> {\n const proxyPayload = payload.payload as Permit2ProxyPayloadV2 | undefined;\n\n // Validate payload structure\n if (\n !proxyPayload?.permit?.permitted?.token ||\n !proxyPayload?.owner ||\n !proxyPayload?.witness\n ) {\n return {\n isValid: false,\n invalidReason: \"invalid_payload_structure\",\n payer: undefined,\n };\n }\n\n // Verify scheme matches\n if (\n payload.accepted.scheme !== SCHEME_PERMIT2_PROXY ||\n requirements.scheme !== SCHEME_PERMIT2_PROXY\n ) {\n return {\n isValid: false,\n invalidReason: \"unsupported_scheme\",\n payer: proxyPayload.owner,\n };\n }\n\n // Verify network matches\n if (payload.accepted.network !== requirements.network) {\n return {\n isValid: false,\n invalidReason: \"network_mismatch\",\n payer: proxyPayload.owner,\n };\n }\n\n // Verify token matches\n if (getAddress(proxyPayload.permit.permitted.token) !== getAddress(requirements.asset)) {\n return {\n isValid: false,\n invalidReason: \"token_mismatch\",\n payer: proxyPayload.owner,\n };\n }\n\n // Verify witness.to matches payTo\n if (getAddress(proxyPayload.witness.to) !== getAddress(requirements.payTo)) {\n return {\n isValid: false,\n invalidReason: \"recipient_mismatch\",\n payer: proxyPayload.owner,\n };\n }\n\n // Verify witness.facilitator is one of our signer addresses\n const signerAddresses = this.signer.getAddresses().map(a => getAddress(a));\n if (!signerAddresses.includes(getAddress(proxyPayload.witness.facilitator))) {\n return {\n isValid: false,\n invalidReason: \"facilitator_mismatch\",\n payer: proxyPayload.owner,\n };\n }\n\n // Verify deadline is in the future\n const now = Math.floor(Date.now() / 1000);\n if (BigInt(proxyPayload.permit.deadline) < BigInt(now + 6)) {\n return {\n isValid: false,\n invalidReason: \"permit_expired\",\n payer: proxyPayload.owner,\n };\n }\n\n // Verify validAfter is not in the future\n if (BigInt(proxyPayload.witness.validAfter) > BigInt(now)) {\n return {\n isValid: false,\n invalidReason: \"payment_too_early\",\n payer: proxyPayload.owner,\n };\n }\n\n // Verify amount is sufficient\n if (BigInt(proxyPayload.permit.permitted.amount) < BigInt(requirements.amount)) {\n return {\n isValid: false,\n invalidReason: \"insufficient_permitted_amount\",\n payer: proxyPayload.owner,\n };\n }\n\n // Check balance\n try {\n const balance = (await this.signer.readContract({\n address: getAddress(requirements.asset),\n abi: erc20BalanceABI,\n functionName: \"balanceOf\",\n args: [getAddress(proxyPayload.owner)],\n })) as bigint;\n\n if (BigInt(balance) < BigInt(requirements.amount)) {\n return {\n isValid: false,\n invalidReason: \"insufficient_funds\",\n payer: proxyPayload.owner,\n };\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n isValid: false,\n invalidReason: `balance_check_failed: ${errorMessage}`,\n payer: proxyPayload.owner,\n };\n }\n\n return {\n isValid: true,\n invalidReason: undefined,\n payer: proxyPayload.owner,\n };\n }\n\n /**\n * Settle a Permit2 Proxy payment by calling settle() on the proxy contract.\n *\n * @param payload - The payment payload\n * @param requirements - The payment requirements\n * @returns Settlement result\n */\n async settle(\n payload: PaymentPayload,\n requirements: PaymentRequirements,\n ): Promise<SettleResponse> {\n const proxyPayload = payload.payload as Permit2ProxyPayloadV2 | undefined;\n\n if (\n !proxyPayload?.permit?.permitted?.token ||\n !proxyPayload?.owner ||\n !proxyPayload?.witness\n ) {\n return {\n success: false,\n network: payload.accepted.network,\n transaction: \"\",\n errorReason: \"invalid_payload_structure\",\n payer: undefined,\n };\n }\n\n // Re-verify before settling\n const valid = await this.verify(payload, requirements);\n if (!valid.isValid) {\n return {\n success: false,\n network: payload.accepted.network,\n transaction: \"\",\n errorReason: valid.invalidReason ?? \"invalid_scheme\",\n payer: proxyPayload.owner,\n };\n }\n\n try {\n // Call settle on the exact proxy contract\n const proxyAddress =\n (requirements.extra?.exactProxyAddress as `0x${string}`) || this.exactProxyAddress;\n\n const tx = await this.signer.writeContract({\n address: proxyAddress,\n abi: permit2ProxyExactABI,\n functionName: \"settle\",\n args: [\n {\n permitted: {\n token: getAddress(proxyPayload.permit.permitted.token),\n amount: BigInt(proxyPayload.permit.permitted.amount),\n },\n nonce: BigInt(proxyPayload.permit.nonce),\n deadline: BigInt(proxyPayload.permit.deadline),\n },\n getAddress(proxyPayload.owner),\n {\n to: getAddress(proxyPayload.witness.to),\n facilitator: getAddress(proxyPayload.witness.facilitator),\n validAfter: BigInt(proxyPayload.witness.validAfter),\n },\n proxyPayload.signature,\n ],\n });\n\n // Wait for transaction confirmation\n const receipt = await this.signer.waitForTransactionReceipt({ hash: tx });\n\n if (receipt.status !== \"success\") {\n return {\n success: false,\n errorReason: \"invalid_transaction_state\",\n transaction: tx,\n network: payload.accepted.network,\n payer: proxyPayload.owner,\n };\n }\n\n return {\n success: true,\n transaction: tx,\n network: payload.accepted.network,\n payer: proxyPayload.owner,\n };\n } catch (error) {\n console.error(\"Failed to settle Permit2 Proxy transaction:\", error);\n return {\n success: false,\n errorReason: \"transaction_failed\",\n transaction: \"\",\n network: payload.accepted.network,\n payer: proxyPayload.owner,\n };\n }\n }\n}\n","import { t402Facilitator } from \"@t402/core/facilitator\";\nimport { Network } from \"@t402/core/types\";\nimport { FacilitatorEvmSigner } from \"../../signer\";\nimport { Permit2ProxyEvmScheme, Permit2ProxyEvmSchemeConfig } from \"./scheme\";\n\n/**\n * Configuration options for registering Permit2 Proxy schemes to an t402Facilitator\n */\nexport interface Permit2ProxyEvmFacilitatorConfig {\n /**\n * The EVM signer for facilitator operations (verify and settle)\n */\n signer: FacilitatorEvmSigner;\n\n /**\n * Networks to register (single network or array of networks)\n * Examples: \"eip155:84532\", [\"eip155:84532\", \"eip155:1\"]\n */\n networks: Network | Network[];\n\n /**\n * Optional scheme configuration (proxy contract addresses, etc.)\n */\n schemeConfig?: Permit2ProxyEvmSchemeConfig;\n}\n\n/**\n * Registers Permit2 Proxy EVM payment schemes to an t402Facilitator instance.\n *\n * @param facilitator - The t402Facilitator instance to register schemes to\n * @param config - Configuration for Permit2 Proxy EVM facilitator registration\n * @returns The facilitator instance for chaining\n */\nexport function registerPermit2ProxyEvmScheme(\n facilitator: t402Facilitator,\n config: Permit2ProxyEvmFacilitatorConfig,\n): t402Facilitator {\n facilitator.register(\n config.networks,\n new Permit2ProxyEvmScheme(config.signer, config.schemeConfig),\n );\n\n return facilitator;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,204 @@
1
+ // src/permit2-proxy/constants.ts
2
+ var SCHEME_PERMIT2_PROXY = "permit2-proxy";
3
+ var T402_EXACT_PERMIT2_PROXY = "0x0000000000000000000000000000000000000000";
4
+ var T402_UPTO_PERMIT2_PROXY = "0x0000000000000000000000000000000000000000";
5
+ var WITNESS_TYPEHASH = "0x5e3bbbe812684a9a24e1e1b7fe7c5b763bfb791ee8423aed3b4e1a5a9e25c255";
6
+ var WITNESS_TYPE_STRING = "Witness witness)TokenPermissions(address token,uint256 amount)Witness(address to,address facilitator,uint256 validAfter)";
7
+ var permit2WitnessTypes = {
8
+ PermitWitnessTransferFrom: [
9
+ { name: "permitted", type: "TokenPermissions" },
10
+ { name: "spender", type: "address" },
11
+ { name: "nonce", type: "uint256" },
12
+ { name: "deadline", type: "uint256" },
13
+ { name: "witness", type: "Witness" }
14
+ ],
15
+ TokenPermissions: [
16
+ { name: "token", type: "address" },
17
+ { name: "amount", type: "uint256" }
18
+ ],
19
+ Witness: [
20
+ { name: "to", type: "address" },
21
+ { name: "facilitator", type: "address" },
22
+ { name: "validAfter", type: "uint256" }
23
+ ]
24
+ };
25
+ var permit2ProxyExactABI = [
26
+ {
27
+ inputs: [
28
+ {
29
+ components: [
30
+ {
31
+ components: [
32
+ { name: "token", type: "address" },
33
+ { name: "amount", type: "uint256" }
34
+ ],
35
+ name: "permitted",
36
+ type: "tuple"
37
+ },
38
+ { name: "nonce", type: "uint256" },
39
+ { name: "deadline", type: "uint256" }
40
+ ],
41
+ name: "permit",
42
+ type: "tuple"
43
+ },
44
+ { name: "owner", type: "address" },
45
+ {
46
+ components: [
47
+ { name: "to", type: "address" },
48
+ { name: "facilitator", type: "address" },
49
+ { name: "validAfter", type: "uint256" }
50
+ ],
51
+ name: "witness",
52
+ type: "tuple"
53
+ },
54
+ { name: "signature", type: "bytes" }
55
+ ],
56
+ name: "settle",
57
+ outputs: [],
58
+ stateMutability: "nonpayable",
59
+ type: "function"
60
+ },
61
+ {
62
+ inputs: [
63
+ {
64
+ components: [
65
+ { name: "value", type: "uint256" },
66
+ { name: "deadline", type: "uint256" },
67
+ { name: "v", type: "uint8" },
68
+ { name: "r", type: "bytes32" },
69
+ { name: "s", type: "bytes32" }
70
+ ],
71
+ name: "permit2612",
72
+ type: "tuple"
73
+ },
74
+ {
75
+ components: [
76
+ {
77
+ components: [
78
+ { name: "token", type: "address" },
79
+ { name: "amount", type: "uint256" }
80
+ ],
81
+ name: "permitted",
82
+ type: "tuple"
83
+ },
84
+ { name: "nonce", type: "uint256" },
85
+ { name: "deadline", type: "uint256" }
86
+ ],
87
+ name: "permit",
88
+ type: "tuple"
89
+ },
90
+ { name: "owner", type: "address" },
91
+ {
92
+ components: [
93
+ { name: "to", type: "address" },
94
+ { name: "facilitator", type: "address" },
95
+ { name: "validAfter", type: "uint256" }
96
+ ],
97
+ name: "witness",
98
+ type: "tuple"
99
+ },
100
+ { name: "signature", type: "bytes" }
101
+ ],
102
+ name: "settleWithPermit",
103
+ outputs: [],
104
+ stateMutability: "nonpayable",
105
+ type: "function"
106
+ }
107
+ ];
108
+ var permit2ProxyUptoABI = [
109
+ {
110
+ inputs: [
111
+ {
112
+ components: [
113
+ {
114
+ components: [
115
+ { name: "token", type: "address" },
116
+ { name: "amount", type: "uint256" }
117
+ ],
118
+ name: "permitted",
119
+ type: "tuple"
120
+ },
121
+ { name: "nonce", type: "uint256" },
122
+ { name: "deadline", type: "uint256" }
123
+ ],
124
+ name: "permit",
125
+ type: "tuple"
126
+ },
127
+ { name: "amount", type: "uint256" },
128
+ { name: "owner", type: "address" },
129
+ {
130
+ components: [
131
+ { name: "to", type: "address" },
132
+ { name: "facilitator", type: "address" },
133
+ { name: "validAfter", type: "uint256" }
134
+ ],
135
+ name: "witness",
136
+ type: "tuple"
137
+ },
138
+ { name: "signature", type: "bytes" }
139
+ ],
140
+ name: "settle",
141
+ outputs: [],
142
+ stateMutability: "nonpayable",
143
+ type: "function"
144
+ },
145
+ {
146
+ inputs: [
147
+ {
148
+ components: [
149
+ { name: "value", type: "uint256" },
150
+ { name: "deadline", type: "uint256" },
151
+ { name: "v", type: "uint8" },
152
+ { name: "r", type: "bytes32" },
153
+ { name: "s", type: "bytes32" }
154
+ ],
155
+ name: "permit2612",
156
+ type: "tuple"
157
+ },
158
+ {
159
+ components: [
160
+ {
161
+ components: [
162
+ { name: "token", type: "address" },
163
+ { name: "amount", type: "uint256" }
164
+ ],
165
+ name: "permitted",
166
+ type: "tuple"
167
+ },
168
+ { name: "nonce", type: "uint256" },
169
+ { name: "deadline", type: "uint256" }
170
+ ],
171
+ name: "permit",
172
+ type: "tuple"
173
+ },
174
+ { name: "amount", type: "uint256" },
175
+ { name: "owner", type: "address" },
176
+ {
177
+ components: [
178
+ { name: "to", type: "address" },
179
+ { name: "facilitator", type: "address" },
180
+ { name: "validAfter", type: "uint256" }
181
+ ],
182
+ name: "witness",
183
+ type: "tuple"
184
+ },
185
+ { name: "signature", type: "bytes" }
186
+ ],
187
+ name: "settleWithPermit",
188
+ outputs: [],
189
+ stateMutability: "nonpayable",
190
+ type: "function"
191
+ }
192
+ ];
193
+
194
+ export {
195
+ SCHEME_PERMIT2_PROXY,
196
+ T402_EXACT_PERMIT2_PROXY,
197
+ T402_UPTO_PERMIT2_PROXY,
198
+ WITNESS_TYPEHASH,
199
+ WITNESS_TYPE_STRING,
200
+ permit2WitnessTypes,
201
+ permit2ProxyExactABI,
202
+ permit2ProxyUptoABI
203
+ };
204
+ //# sourceMappingURL=chunk-UK2POASM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/permit2-proxy/constants.ts"],"sourcesContent":["/**\n * Permit2 Proxy Constants\n *\n * Contract addresses, EIP-712 type definitions, and ABI fragments\n * for T402 Permit2 proxy contracts with witness-based settlement.\n */\n\n// Re-export shared Permit2 constants\nexport { PERMIT2_ADDRESS, erc20BalanceABI } from \"../permit2/constants\";\n\n/** Scheme identifier for Permit2 proxy */\nexport const SCHEME_PERMIT2_PROXY = \"permit2-proxy\" as const;\n\n/** T402 Exact Permit2 Proxy contract address (TBD - not yet deployed) */\nexport const T402_EXACT_PERMIT2_PROXY =\n \"0x0000000000000000000000000000000000000000\" as `0x${string}`;\n\n/** T402 Upto Permit2 Proxy contract address (TBD - not yet deployed) */\nexport const T402_UPTO_PERMIT2_PROXY =\n \"0x0000000000000000000000000000000000000000\" as `0x${string}`;\n\n/**\n * EIP-712 typehash for the Witness struct.\n * Must match WITNESS_TYPEHASH in T402BasePermit2Proxy.sol:\n * keccak256(\"Witness(address to,address facilitator,uint256 validAfter)\")\n */\nexport const WITNESS_TYPEHASH =\n \"0x5e3bbbe812684a9a24e1e1b7fe7c5b763bfb791ee8423aed3b4e1a5a9e25c255\" as const;\n\n/**\n * Witness type string for Permit2's permitWitnessTransferFrom.\n * Format: \"Witness witness)TokenPermissions(...)Witness(...)\" -- types listed alphabetically.\n * Must match WITNESS_TYPE_STRING in T402BasePermit2Proxy.sol.\n */\nexport const WITNESS_TYPE_STRING =\n \"Witness witness)TokenPermissions(address token,uint256 amount)Witness(address to,address facilitator,uint256 validAfter)\" as const;\n\n/**\n * EIP-712 type definitions for PermitWitnessTransferFrom with Witness.\n * Used by clients when signing the permit with witness data.\n */\nexport const permit2WitnessTypes = {\n PermitWitnessTransferFrom: [\n { name: \"permitted\", type: \"TokenPermissions\" },\n { name: \"spender\", type: \"address\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n { name: \"witness\", type: \"Witness\" },\n ],\n TokenPermissions: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n Witness: [\n { name: \"to\", type: \"address\" },\n { name: \"facilitator\", type: \"address\" },\n { name: \"validAfter\", type: \"uint256\" },\n ],\n} as const;\n\n/**\n * ABI for T402ExactPermit2Proxy contract.\n * Includes settle() and settleWithPermit() functions.\n */\nexport const permit2ProxyExactABI = [\n {\n inputs: [\n {\n components: [\n {\n components: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"permitted\",\n type: \"tuple\",\n },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n name: \"permit\",\n type: \"tuple\",\n },\n { name: \"owner\", type: \"address\" },\n {\n components: [\n { name: \"to\", type: \"address\" },\n { name: \"facilitator\", type: \"address\" },\n { name: \"validAfter\", type: \"uint256\" },\n ],\n name: \"witness\",\n type: \"tuple\",\n },\n { name: \"signature\", type: \"bytes\" },\n ],\n name: \"settle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { name: \"value\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n { name: \"v\", type: \"uint8\" },\n { name: \"r\", type: \"bytes32\" },\n { name: \"s\", type: \"bytes32\" },\n ],\n name: \"permit2612\",\n type: \"tuple\",\n },\n {\n components: [\n {\n components: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"permitted\",\n type: \"tuple\",\n },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n name: \"permit\",\n type: \"tuple\",\n },\n { name: \"owner\", type: \"address\" },\n {\n components: [\n { name: \"to\", type: \"address\" },\n { name: \"facilitator\", type: \"address\" },\n { name: \"validAfter\", type: \"uint256\" },\n ],\n name: \"witness\",\n type: \"tuple\",\n },\n { name: \"signature\", type: \"bytes\" },\n ],\n name: \"settleWithPermit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\n/**\n * ABI for T402UptoPermit2Proxy contract.\n * Includes settle() and settleWithPermit() functions.\n */\nexport const permit2ProxyUptoABI = [\n {\n inputs: [\n {\n components: [\n {\n components: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"permitted\",\n type: \"tuple\",\n },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n name: \"permit\",\n type: \"tuple\",\n },\n { name: \"amount\", type: \"uint256\" },\n { name: \"owner\", type: \"address\" },\n {\n components: [\n { name: \"to\", type: \"address\" },\n { name: \"facilitator\", type: \"address\" },\n { name: \"validAfter\", type: \"uint256\" },\n ],\n name: \"witness\",\n type: \"tuple\",\n },\n { name: \"signature\", type: \"bytes\" },\n ],\n name: \"settle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n { name: \"value\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n { name: \"v\", type: \"uint8\" },\n { name: \"r\", type: \"bytes32\" },\n { name: \"s\", type: \"bytes32\" },\n ],\n name: \"permit2612\",\n type: \"tuple\",\n },\n {\n components: [\n {\n components: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"permitted\",\n type: \"tuple\",\n },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n name: \"permit\",\n type: \"tuple\",\n },\n { name: \"amount\", type: \"uint256\" },\n { name: \"owner\", type: \"address\" },\n {\n components: [\n { name: \"to\", type: \"address\" },\n { name: \"facilitator\", type: \"address\" },\n { name: \"validAfter\", type: \"uint256\" },\n ],\n name: \"witness\",\n type: \"tuple\",\n },\n { name: \"signature\", type: \"bytes\" },\n ],\n name: \"settleWithPermit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n"],"mappings":";AAWO,IAAM,uBAAuB;AAG7B,IAAM,2BACX;AAGK,IAAM,0BACX;AAOK,IAAM,mBACX;AAOK,IAAM,sBACX;AAMK,IAAM,sBAAsB;AAAA,EACjC,2BAA2B;AAAA,IACzB,EAAE,MAAM,aAAa,MAAM,mBAAmB;AAAA,IAC9C,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,IACnC,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,IACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,IACpC,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,EACrC;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,IACjC,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACP,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,IAC9B,EAAE,MAAM,eAAe,MAAM,UAAU;AAAA,IACvC,EAAE,MAAM,cAAc,MAAM,UAAU;AAAA,EACxC;AACF;AAMO,IAAM,uBAAuB;AAAA,EAClC;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,cACjC,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,YACpC;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,UACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,QACtC;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC;AAAA,QACE,YAAY;AAAA,UACV,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,UAC9B,EAAE,MAAM,eAAe,MAAM,UAAU;AAAA,UACvC,EAAE,MAAM,cAAc,MAAM,UAAU;AAAA,QACxC;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,UACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,UACpC,EAAE,MAAM,KAAK,MAAM,QAAQ;AAAA,UAC3B,EAAE,MAAM,KAAK,MAAM,UAAU;AAAA,UAC7B,EAAE,MAAM,KAAK,MAAM,UAAU;AAAA,QAC/B;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,cACjC,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,YACpC;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,UACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,QACtC;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC;AAAA,QACE,YAAY;AAAA,UACV,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,UAC9B,EAAE,MAAM,eAAe,MAAM,UAAU;AAAA,UACvC,EAAE,MAAM,cAAc,MAAM,UAAU;AAAA,QACxC;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;AAMO,IAAM,sBAAsB;AAAA,EACjC;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,cACjC,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,YACpC;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,UACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,QACtC;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,MAClC,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC;AAAA,QACE,YAAY;AAAA,UACV,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,UAC9B,EAAE,MAAM,eAAe,MAAM,UAAU;AAAA,UACvC,EAAE,MAAM,cAAc,MAAM,UAAU;AAAA,QACxC;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,YAAY;AAAA,UACV,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,UACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,UACpC,EAAE,MAAM,KAAK,MAAM,QAAQ;AAAA,UAC3B,EAAE,MAAM,KAAK,MAAM,UAAU;AAAA,UAC7B,EAAE,MAAM,KAAK,MAAM,UAAU;AAAA,QAC/B;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,YAAY;AAAA,UACV;AAAA,YACE,YAAY;AAAA,cACV,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,cACjC,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,YACpC;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,UACjC,EAAE,MAAM,YAAY,MAAM,UAAU;AAAA,QACtC;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,MAClC,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC;AAAA,QACE,YAAY;AAAA,UACV,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,UAC9B,EAAE,MAAM,eAAe,MAAM,UAAU;AAAA,UACvC,EAAE,MAAM,cAAc,MAAM,UAAU;AAAA,QACxC;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,IACrC;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;","names":[]}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Permit2 Types
3
+ *
4
+ * Type definitions for Uniswap Permit2 SignatureTransfer scheme.
5
+ */
6
+ /**
7
+ * Token permissions for Permit2
8
+ */
9
+ type TokenPermissions = {
10
+ /** ERC20 token address */
11
+ token: `0x${string}`;
12
+ /** Maximum amount permitted to transfer */
13
+ amount: string;
14
+ };
15
+ /**
16
+ * Permit2 PermitTransferFrom parameters
17
+ */
18
+ type PermitTransferFrom = {
19
+ /** Token and amount permissions */
20
+ permitted: TokenPermissions;
21
+ /** Unique nonce (monotonically increasing per owner on the Permit2 contract) */
22
+ nonce: string;
23
+ /** Unix timestamp deadline for the permit */
24
+ deadline: string;
25
+ };
26
+ /**
27
+ * Transfer details for Permit2
28
+ */
29
+ type SignatureTransferDetails = {
30
+ /** Recipient address */
31
+ to: `0x${string}`;
32
+ /** Requested transfer amount */
33
+ requestedAmount: string;
34
+ };
35
+ /**
36
+ * Permit2 payment payload (V2)
37
+ */
38
+ type Permit2PayloadV2 = {
39
+ /** The permit parameters */
40
+ permit: PermitTransferFrom;
41
+ /** Transfer destination and amount */
42
+ transferDetails: SignatureTransferDetails;
43
+ /** EIP-712 signature */
44
+ signature: `0x${string}`;
45
+ /** Token owner address */
46
+ owner: `0x${string}`;
47
+ };
48
+
49
+ /**
50
+ * Permit2 Constants
51
+ *
52
+ * Uniswap Permit2 contract addresses, type hashes, and ABI fragments.
53
+ */
54
+ /** Canonical Permit2 contract address (same on all EVM chains) */
55
+ declare const PERMIT2_ADDRESS: "0x000000000022D473030F116dDEE9F6B43aC78BA3";
56
+ /** EIP-712 type definitions for Permit2 SignatureTransfer */
57
+ declare const permit2Types: {
58
+ readonly PermitTransferFrom: readonly [{
59
+ readonly name: "permitted";
60
+ readonly type: "TokenPermissions";
61
+ }, {
62
+ readonly name: "spender";
63
+ readonly type: "address";
64
+ }, {
65
+ readonly name: "nonce";
66
+ readonly type: "uint256";
67
+ }, {
68
+ readonly name: "deadline";
69
+ readonly type: "uint256";
70
+ }];
71
+ readonly TokenPermissions: readonly [{
72
+ readonly name: "token";
73
+ readonly type: "address";
74
+ }, {
75
+ readonly name: "amount";
76
+ readonly type: "uint256";
77
+ }];
78
+ };
79
+ /** Permit2 ABI for permitTransferFrom */
80
+ declare const permit2ABI: readonly [{
81
+ readonly inputs: readonly [{
82
+ readonly components: readonly [{
83
+ readonly components: readonly [{
84
+ readonly name: "token";
85
+ readonly type: "address";
86
+ }, {
87
+ readonly name: "amount";
88
+ readonly type: "uint256";
89
+ }];
90
+ readonly name: "permitted";
91
+ readonly type: "tuple";
92
+ }, {
93
+ readonly name: "nonce";
94
+ readonly type: "uint256";
95
+ }, {
96
+ readonly name: "deadline";
97
+ readonly type: "uint256";
98
+ }];
99
+ readonly name: "permit";
100
+ readonly type: "tuple";
101
+ }, {
102
+ readonly components: readonly [{
103
+ readonly name: "to";
104
+ readonly type: "address";
105
+ }, {
106
+ readonly name: "requestedAmount";
107
+ readonly type: "uint256";
108
+ }];
109
+ readonly name: "transferDetails";
110
+ readonly type: "tuple";
111
+ }, {
112
+ readonly name: "owner";
113
+ readonly type: "address";
114
+ }, {
115
+ readonly name: "signature";
116
+ readonly type: "bytes";
117
+ }];
118
+ readonly name: "permitTransferFrom";
119
+ readonly outputs: readonly [];
120
+ readonly stateMutability: "nonpayable";
121
+ readonly type: "function";
122
+ }, {
123
+ readonly inputs: readonly [{
124
+ readonly name: "account";
125
+ readonly type: "address";
126
+ }];
127
+ readonly name: "balanceOf";
128
+ readonly outputs: readonly [{
129
+ readonly name: "";
130
+ readonly type: "uint256";
131
+ }];
132
+ readonly stateMutability: "view";
133
+ readonly type: "function";
134
+ }];
135
+
136
+ export { PERMIT2_ADDRESS as P, type SignatureTransferDetails as S, type TokenPermissions as T, type Permit2PayloadV2 as a, type PermitTransferFrom as b, permit2Types as c, permit2ABI as p };