@lifi/sdk 3.7.8 → 3.7.10-beta.0
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.
- package/package.json +7 -7
- package/src/_cjs/core/EVM/EVMStepExecutor.js +3 -0
- package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -1
- package/src/_cjs/core/EVM/abi.js +2 -10
- package/src/_cjs/core/EVM/abi.js.map +1 -1
- package/src/_cjs/core/EVM/permits/constants.js +32 -1
- package/src/_cjs/core/EVM/permits/constants.js.map +1 -1
- package/src/_cjs/core/EVM/permits/getNativePermit.js +57 -48
- package/src/_cjs/core/EVM/permits/getNativePermit.js.map +1 -1
- package/src/_cjs/version.js +1 -1
- package/src/_cjs/version.js.map +1 -1
- package/src/_esm/core/EVM/EVMStepExecutor.js +4 -1
- package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -1
- package/src/_esm/core/EVM/abi.js +1 -11
- package/src/_esm/core/EVM/abi.js.map +1 -1
- package/src/_esm/core/EVM/permits/constants.js +59 -0
- package/src/_esm/core/EVM/permits/constants.js.map +1 -1
- package/src/_esm/core/EVM/permits/getNativePermit.js +63 -70
- package/src/_esm/core/EVM/permits/getNativePermit.js.map +1 -1
- package/src/_esm/version.js +1 -1
- package/src/_esm/version.js.map +1 -1
- package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -1
- package/src/_types/core/EVM/abi.d.ts +8 -18
- package/src/_types/core/EVM/abi.d.ts.map +1 -1
- package/src/_types/core/EVM/permits/constants.d.ts +67 -0
- package/src/_types/core/EVM/permits/constants.d.ts.map +1 -1
- package/src/_types/core/EVM/permits/getNativePermit.d.ts +7 -0
- package/src/_types/core/EVM/permits/getNativePermit.d.ts.map +1 -1
- package/src/_types/version.d.ts +1 -1
- package/src/_types/version.d.ts.map +1 -1
- package/src/core/EVM/EVMStepExecutor.ts +4 -1
- package/src/core/EVM/abi.ts +1 -12
- package/src/core/EVM/permits/constants.ts +71 -0
- package/src/core/EVM/permits/getNativePermit.ts +107 -95
- package/src/version.ts +1 -1
|
@@ -1,26 +1,9 @@
|
|
|
1
1
|
import { encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex, } from 'viem';
|
|
2
2
|
import { multicall, readContract } from 'viem/actions';
|
|
3
|
-
import { eip2612Abi
|
|
3
|
+
import { eip2612Abi } from '../abi.js';
|
|
4
4
|
import { getActionWithFallback } from '../getActionWithFallback.js';
|
|
5
5
|
import { getMulticallAddress } from '../utils.js';
|
|
6
|
-
|
|
7
|
-
* EIP-712 domain typehash with chainId
|
|
8
|
-
* @link https://eips.ethereum.org/EIPS/eip-712#specification
|
|
9
|
-
*
|
|
10
|
-
* keccak256(toBytes(
|
|
11
|
-
* 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'
|
|
12
|
-
* ))
|
|
13
|
-
*/
|
|
14
|
-
const EIP712_DOMAIN_TYPEHASH = '0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f';
|
|
15
|
-
/**
|
|
16
|
-
* EIP-712 domain typehash with salt (e.g. USDC.e on Polygon)
|
|
17
|
-
* @link https://eips.ethereum.org/EIPS/eip-712#specification
|
|
18
|
-
*
|
|
19
|
-
* keccak256(toBytes(
|
|
20
|
-
* 'EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)'
|
|
21
|
-
* ))
|
|
22
|
-
*/
|
|
23
|
-
const EIP712_DOMAIN_TYPEHASH_WITH_SALT = '0x36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab7';
|
|
6
|
+
import { DAI_LIKE_PERMIT_TYPEHASH, EIP712_DOMAIN_TYPEHASH, EIP712_DOMAIN_TYPEHASH_WITH_SALT, eip2612Types, } from './constants.js';
|
|
24
7
|
function makeDomainSeparator({ name, version, chainId, verifyingContract, withSalt = false, }) {
|
|
25
8
|
const nameHash = keccak256(toBytes(name));
|
|
26
9
|
const versionHash = keccak256(toBytes(version));
|
|
@@ -84,15 +67,7 @@ function validateDomainSeparator({ name, version, chainId, verifyingContract, do
|
|
|
84
67
|
domain: {},
|
|
85
68
|
};
|
|
86
69
|
}
|
|
87
|
-
|
|
88
|
-
* Retrieves native permit data (EIP-2612) for a token on a specific chain
|
|
89
|
-
* @link https://eips.ethereum.org/EIPS/eip-2612
|
|
90
|
-
* @param client - The Viem client instance
|
|
91
|
-
* @param chain - The extended chain object containing chain details
|
|
92
|
-
* @param tokenAddress - The address of the token to check for permit support
|
|
93
|
-
* @returns {Promise<NativePermitData>} Object containing permit data including name, version, nonce and support status
|
|
94
|
-
*/
|
|
95
|
-
export const getNativePermit = async (client, { chainId, tokenAddress, spenderAddress, amount }) => {
|
|
70
|
+
export const getContractData = async (client, chainId, tokenAddress) => {
|
|
96
71
|
try {
|
|
97
72
|
const multicallAddress = await getMulticallAddress(chainId);
|
|
98
73
|
const contractCalls = [
|
|
@@ -106,6 +81,11 @@ export const getNativePermit = async (client, { chainId, tokenAddress, spenderAd
|
|
|
106
81
|
abi: eip2612Abi,
|
|
107
82
|
functionName: 'DOMAIN_SEPARATOR',
|
|
108
83
|
},
|
|
84
|
+
{
|
|
85
|
+
address: tokenAddress,
|
|
86
|
+
abi: eip2612Abi,
|
|
87
|
+
functionName: 'PERMIT_TYPEHASH',
|
|
88
|
+
},
|
|
109
89
|
{
|
|
110
90
|
address: tokenAddress,
|
|
111
91
|
abi: eip2612Abi,
|
|
@@ -120,7 +100,7 @@ export const getNativePermit = async (client, { chainId, tokenAddress, spenderAd
|
|
|
120
100
|
];
|
|
121
101
|
if (multicallAddress) {
|
|
122
102
|
try {
|
|
123
|
-
const [nameResult, domainSeparatorResult, noncesResult, versionResult] = await getActionWithFallback(client, multicall, 'multicall', {
|
|
103
|
+
const [nameResult, domainSeparatorResult, permitTypehashResult, noncesResult, versionResult,] = await getActionWithFallback(client, multicall, 'multicall', {
|
|
124
104
|
contracts: contractCalls,
|
|
125
105
|
multicallAddress,
|
|
126
106
|
});
|
|
@@ -133,35 +113,19 @@ export const getNativePermit = async (client, { chainId, tokenAddress, spenderAd
|
|
|
133
113
|
// Fall back to individual calls if multicall fails
|
|
134
114
|
throw new Error('Multicall failed');
|
|
135
115
|
}
|
|
136
|
-
|
|
116
|
+
return {
|
|
137
117
|
name: nameResult.result,
|
|
138
|
-
version: versionResult.result ?? '1',
|
|
139
|
-
chainId,
|
|
140
|
-
verifyingContract: tokenAddress,
|
|
141
118
|
domainSeparator: domainSeparatorResult.result,
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
const message = {
|
|
147
|
-
owner: client.account.address,
|
|
148
|
-
spender: spenderAddress,
|
|
149
|
-
value: amount.toString(),
|
|
150
|
-
nonce: noncesResult.result.toString(),
|
|
151
|
-
deadline: BigInt(Math.floor(Date.now() / 1000) + 30 * 60).toString(), // 30 minutes
|
|
152
|
-
};
|
|
153
|
-
return {
|
|
154
|
-
primaryType: 'Permit',
|
|
155
|
-
domain,
|
|
156
|
-
types: eip2612Types,
|
|
157
|
-
message,
|
|
119
|
+
permitTypehash: permitTypehashResult.result,
|
|
120
|
+
nonce: noncesResult.result,
|
|
121
|
+
version: versionResult.result ?? '1',
|
|
158
122
|
};
|
|
159
123
|
}
|
|
160
124
|
catch {
|
|
161
125
|
// Fall through to individual calls
|
|
162
126
|
}
|
|
163
127
|
}
|
|
164
|
-
const [nameResult, domainSeparatorResult, noncesResult, versionResult] = (await Promise.allSettled(contractCalls.map((call) => getActionWithFallback(client, readContract, 'readContract', call))));
|
|
128
|
+
const [nameResult, domainSeparatorResult, permitTypehashResult, noncesResult, versionResult,] = (await Promise.allSettled(contractCalls.map((call) => getActionWithFallback(client, readContract, 'readContract', call))));
|
|
165
129
|
if (nameResult.status !== 'fulfilled' ||
|
|
166
130
|
domainSeparatorResult.status !== 'fulfilled' ||
|
|
167
131
|
noncesResult.status !== 'fulfilled') {
|
|
@@ -169,32 +133,61 @@ export const getNativePermit = async (client, { chainId, tokenAddress, spenderAd
|
|
|
169
133
|
}
|
|
170
134
|
const name = nameResult.value;
|
|
171
135
|
const version = versionResult.status === 'fulfilled' ? versionResult.value : '1';
|
|
172
|
-
|
|
136
|
+
return {
|
|
173
137
|
name,
|
|
174
|
-
version,
|
|
175
|
-
chainId,
|
|
176
|
-
verifyingContract: tokenAddress,
|
|
177
138
|
domainSeparator: domainSeparatorResult.value,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
owner: client.account.address,
|
|
184
|
-
spender: spenderAddress,
|
|
185
|
-
value: amount.toString(),
|
|
186
|
-
nonce: noncesResult.value.toString(),
|
|
187
|
-
deadline: BigInt(Math.floor(Date.now() / 1000) + 30 * 60).toString(), // 30 minutes
|
|
188
|
-
};
|
|
189
|
-
return {
|
|
190
|
-
primaryType: 'Permit',
|
|
191
|
-
domain,
|
|
192
|
-
types: eip2612Types,
|
|
193
|
-
message,
|
|
139
|
+
permitTypehash: permitTypehashResult.status === 'fulfilled'
|
|
140
|
+
? permitTypehashResult.value
|
|
141
|
+
: undefined,
|
|
142
|
+
nonce: noncesResult.value,
|
|
143
|
+
version,
|
|
194
144
|
};
|
|
195
145
|
}
|
|
196
146
|
catch {
|
|
197
147
|
return undefined;
|
|
198
148
|
}
|
|
199
149
|
};
|
|
150
|
+
/**
|
|
151
|
+
* Retrieves native permit data (EIP-2612) for a token on a specific chain
|
|
152
|
+
* @link https://eips.ethereum.org/EIPS/eip-2612
|
|
153
|
+
* @param client - The Viem client instance
|
|
154
|
+
* @param chain - The extended chain object containing chain details
|
|
155
|
+
* @param tokenAddress - The address of the token to check for permit support
|
|
156
|
+
* @returns {Promise<NativePermitData>} Object containing permit data including name, version, nonce and support status
|
|
157
|
+
*/
|
|
158
|
+
export const getNativePermit = async (client, { chainId, tokenAddress, spenderAddress, amount }) => {
|
|
159
|
+
const contractData = await getContractData(client, chainId, tokenAddress);
|
|
160
|
+
if (!contractData) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
const { name, domainSeparator, permitTypehash, nonce, version } = contractData;
|
|
164
|
+
// We don't support DAI-like permits yet (e.g. DAI on Ethereum)
|
|
165
|
+
if (permitTypehash === DAI_LIKE_PERMIT_TYPEHASH) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
const { isValid, domain } = validateDomainSeparator({
|
|
169
|
+
name,
|
|
170
|
+
version,
|
|
171
|
+
chainId,
|
|
172
|
+
verifyingContract: tokenAddress,
|
|
173
|
+
domainSeparator,
|
|
174
|
+
});
|
|
175
|
+
if (!isValid) {
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
const deadline = BigInt(Math.floor(Date.now() / 1000) + 30 * 60).toString(); // 30 minutes
|
|
179
|
+
const message = {
|
|
180
|
+
owner: client.account.address,
|
|
181
|
+
spender: spenderAddress,
|
|
182
|
+
value: amount.toString(),
|
|
183
|
+
nonce: nonce.toString(),
|
|
184
|
+
deadline,
|
|
185
|
+
};
|
|
186
|
+
return {
|
|
187
|
+
primaryType: 'Permit',
|
|
188
|
+
domain,
|
|
189
|
+
types: eip2612Types,
|
|
190
|
+
message,
|
|
191
|
+
};
|
|
192
|
+
};
|
|
200
193
|
//# sourceMappingURL=getNativePermit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNativePermit.js","sourceRoot":"","sources":["../../../../core/EVM/permits/getNativePermit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,GAAG,EACH,kBAAkB,EAClB,OAAO,EACP,KAAK,GACN,MAAM,MAAM,CAAA;AAGb,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"getNativePermit.js","sourceRoot":"","sources":["../../../../core/EVM/permits/getNativePermit.ts"],"names":[],"mappings":"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"}
|
package/src/_esm/version.js
CHANGED
package/src/_esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAA;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAA;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EVMStepExecutor.d.ts","sourceRoot":"","sources":["../../../core/EVM/EVMStepExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAA;AAC3E,OAAO,KAAK,EAEV,MAAM,EAEN,IAAI,EAIL,MAAM,MAAM,CAAA;AAiBb,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,OAAO,KAAK,EACV,gBAAgB,EAChB,OAAO,EACP,mBAAmB,EAEpB,MAAM,aAAa,CAAA;AAcpB,OAAO,KAAK,EAAQ,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAS7D,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,eAAgB,SAAQ,gBAAgB;IACnD,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,EAAE,sBAAsB;IAM3C,WAAW,GAAU,MAAM,gBAAgB,EAAE,UAAU,OAAO,iCAoD7D;IAED,kBAAkB,GAAU,2EAQzB;QACD,IAAI,EAAE,gBAAgB,CAAA;QACtB,OAAO,EAAE,OAAO,CAAA;QAChB,SAAS,EAAE,aAAa,CAAA;QACxB,OAAO,EAAE,aAAa,CAAA;QACtB,MAAM,EAAE,qBAAqB,CAAA;QAC7B,MAAM,EAAE,IAAI,CAAA;QACZ,iBAAiB,EAAE,OAAO,CAAA;KAC3B,mBA0DA;IAED,WAAW,GACT,MAAM,gBAAgB,EAEtB,2BAAyB,KACxB,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"EVMStepExecutor.d.ts","sourceRoot":"","sources":["../../../core/EVM/EVMStepExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAA;AAC3E,OAAO,KAAK,EAEV,MAAM,EAEN,IAAI,EAIL,MAAM,MAAM,CAAA;AAiBb,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,OAAO,KAAK,EACV,gBAAgB,EAChB,OAAO,EACP,mBAAmB,EAEpB,MAAM,aAAa,CAAA;AAcpB,OAAO,KAAK,EAAQ,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAS7D,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,eAAgB,SAAQ,gBAAgB;IACnD,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,EAAE,sBAAsB;IAM3C,WAAW,GAAU,MAAM,gBAAgB,EAAE,UAAU,OAAO,iCAoD7D;IAED,kBAAkB,GAAU,2EAQzB;QACD,IAAI,EAAE,gBAAgB,CAAA;QACtB,OAAO,EAAE,OAAO,CAAA;QAChB,SAAS,EAAE,aAAa,CAAA;QACxB,OAAO,EAAE,aAAa,CAAA;QACtB,MAAM,EAAE,qBAAqB,CAAA;QAC7B,MAAM,EAAE,IAAI,CAAA;QACZ,iBAAiB,EAAE,OAAO,CAAA;KAC3B,mBA0DA;IAED,WAAW,GACT,MAAM,gBAAgB,EAEtB,2BAAyB,KACxB,OAAO,CAAC,gBAAgB,CAAC,CA+c3B;CACF"}
|
|
@@ -133,6 +133,14 @@ export declare const eip2612Abi: readonly [{
|
|
|
133
133
|
readonly outputs: readonly [{
|
|
134
134
|
readonly type: "string";
|
|
135
135
|
}];
|
|
136
|
+
}, {
|
|
137
|
+
readonly name: "PERMIT_TYPEHASH";
|
|
138
|
+
readonly type: "function";
|
|
139
|
+
readonly stateMutability: "view";
|
|
140
|
+
readonly inputs: readonly [];
|
|
141
|
+
readonly outputs: readonly [{
|
|
142
|
+
readonly type: "bytes32";
|
|
143
|
+
}];
|
|
136
144
|
}];
|
|
137
145
|
export declare const approveAbi: readonly [{
|
|
138
146
|
readonly name: "approve";
|
|
@@ -182,22 +190,4 @@ export declare const balanceOfAbi: readonly [{
|
|
|
182
190
|
readonly type: "uint256";
|
|
183
191
|
}];
|
|
184
192
|
}];
|
|
185
|
-
export declare const eip2612Types: {
|
|
186
|
-
readonly Permit: readonly [{
|
|
187
|
-
readonly name: "owner";
|
|
188
|
-
readonly type: "address";
|
|
189
|
-
}, {
|
|
190
|
-
readonly name: "spender";
|
|
191
|
-
readonly type: "address";
|
|
192
|
-
}, {
|
|
193
|
-
readonly name: "value";
|
|
194
|
-
readonly type: "uint256";
|
|
195
|
-
}, {
|
|
196
|
-
readonly name: "nonce";
|
|
197
|
-
readonly type: "uint256";
|
|
198
|
-
}, {
|
|
199
|
-
readonly name: "deadline";
|
|
200
|
-
readonly type: "uint256";
|
|
201
|
-
}];
|
|
202
|
-
};
|
|
203
193
|
//# sourceMappingURL=abi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../../core/EVM/abi.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK1B,CAAA;AAEF,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../../core/EVM/abi.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK1B,CAAA;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOrB,CAAA;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;EAErB,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;EAEvB,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;EAE3B,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;EAEvB,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Hex } from 'viem';
|
|
1
2
|
export declare const MaxAllowanceTransferAmount: bigint;
|
|
2
3
|
export declare const MaxAllowanceExpiration: bigint;
|
|
3
4
|
export declare const MaxOrderedNonce: bigint;
|
|
@@ -5,4 +6,70 @@ export declare const MaxSignatureTransferAmount: bigint;
|
|
|
5
6
|
export declare const MaxUnorderedNonce: bigint;
|
|
6
7
|
export declare const MaxSigDeadline: bigint;
|
|
7
8
|
export declare const InstantExpiration = 0n;
|
|
9
|
+
export declare const EIP_2612_PERMIT_SELECTOR = "0xd505accf";
|
|
10
|
+
export declare const DAI_PERMIT_SELECTOR = "0x8fcbaf0c";
|
|
11
|
+
/**
|
|
12
|
+
* EIP-712 domain typehash with chainId
|
|
13
|
+
* @link https://eips.ethereum.org/EIPS/eip-712#specification
|
|
14
|
+
*
|
|
15
|
+
* keccak256(toBytes(
|
|
16
|
+
* 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'
|
|
17
|
+
* ))
|
|
18
|
+
*/
|
|
19
|
+
export declare const EIP712_DOMAIN_TYPEHASH: Hex;
|
|
20
|
+
/**
|
|
21
|
+
* EIP-712 domain typehash with salt (e.g. USDC.e on Polygon)
|
|
22
|
+
* @link https://eips.ethereum.org/EIPS/eip-712#specification
|
|
23
|
+
*
|
|
24
|
+
* keccak256(toBytes(
|
|
25
|
+
* 'EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)'
|
|
26
|
+
* ))
|
|
27
|
+
*/
|
|
28
|
+
export declare const EIP712_DOMAIN_TYPEHASH_WITH_SALT: Hex;
|
|
29
|
+
export declare const EIP712_DOMAINS_WITHOUT_VERSION: `0x${string}`[];
|
|
30
|
+
/**
|
|
31
|
+
* @signature Permit(address holder,address spender,uint256 nonce,uint256 expiry,bool allowed)
|
|
32
|
+
* */
|
|
33
|
+
export declare const DAI_LIKE_PERMIT_TYPEHASH: Hex;
|
|
34
|
+
/**
|
|
35
|
+
* @example `${tokenAddress}:${chainId}.toLowerCase()`
|
|
36
|
+
* @warning Only toLowerCase string
|
|
37
|
+
* */
|
|
38
|
+
export declare const TOKEN_ADDRESSES_WITH_SALT: string[];
|
|
39
|
+
export declare const eip2612Types: {
|
|
40
|
+
readonly Permit: readonly [{
|
|
41
|
+
readonly name: "owner";
|
|
42
|
+
readonly type: "address";
|
|
43
|
+
}, {
|
|
44
|
+
readonly name: "spender";
|
|
45
|
+
readonly type: "address";
|
|
46
|
+
}, {
|
|
47
|
+
readonly name: "value";
|
|
48
|
+
readonly type: "uint256";
|
|
49
|
+
}, {
|
|
50
|
+
readonly name: "nonce";
|
|
51
|
+
readonly type: "uint256";
|
|
52
|
+
}, {
|
|
53
|
+
readonly name: "deadline";
|
|
54
|
+
readonly type: "uint256";
|
|
55
|
+
}];
|
|
56
|
+
};
|
|
57
|
+
export declare const daiPermitTypes: {
|
|
58
|
+
readonly Permit: readonly [{
|
|
59
|
+
readonly name: "holder";
|
|
60
|
+
readonly type: "address";
|
|
61
|
+
}, {
|
|
62
|
+
readonly name: "spender";
|
|
63
|
+
readonly type: "address";
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: "nonce";
|
|
66
|
+
readonly type: "uint256";
|
|
67
|
+
}, {
|
|
68
|
+
readonly name: "expiry";
|
|
69
|
+
readonly type: "uint256";
|
|
70
|
+
}, {
|
|
71
|
+
readonly name: "allowed";
|
|
72
|
+
readonly type: "bool";
|
|
73
|
+
}];
|
|
74
|
+
};
|
|
8
75
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../core/EVM/permits/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../core/EVM/permits/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAG/B,eAAO,MAAM,0BAA0B,QAAa,CAAA;AACpD,eAAO,MAAM,sBAAsB,QAAY,CAAA;AAC/C,eAAO,MAAM,eAAe,QAAY,CAAA;AAExC,eAAO,MAAM,0BAA0B,QAAa,CAAA;AACpD,eAAO,MAAM,iBAAiB,QAAa,CAAA;AAC3C,eAAO,MAAM,cAAc,QAAa,CAAA;AAExC,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAEnC,eAAO,MAAM,wBAAwB,eAAe,CAAA;AACpD,eAAO,MAAM,mBAAmB,eAAe,CAAA;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EACuC,GAAG,CAAA;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC,EAC6B,GAAG,CAAA;AAE7E,eAAO,MAAM,8BAA8B,iBAK1C,CAAA;AAED;;KAEK;AACL,eAAO,MAAM,wBAAwB,EACqC,GAAG,CAAA;AAE7E;;;KAGK;AACL,eAAO,MAAM,yBAAyB,UAGrC,CAAA;AAID,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;CAQf,CAAA;AAGV,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;CAQjB,CAAA"}
|
|
@@ -6,6 +6,13 @@ export type GetNativePermitParams = {
|
|
|
6
6
|
spenderAddress: Address;
|
|
7
7
|
amount: bigint;
|
|
8
8
|
};
|
|
9
|
+
export declare const getContractData: (client: Client, chainId: number, tokenAddress: Address) => Promise<{
|
|
10
|
+
name: string;
|
|
11
|
+
domainSeparator: `0x${string}`;
|
|
12
|
+
permitTypehash: `0x${string}` | undefined;
|
|
13
|
+
nonce: bigint;
|
|
14
|
+
version: string;
|
|
15
|
+
} | undefined>;
|
|
9
16
|
/**
|
|
10
17
|
* Retrieves native permit data (EIP-2612) for a token on a specific chain
|
|
11
18
|
* @link https://eips.ethereum.org/EIPS/eip-2612
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNativePermit.d.ts","sourceRoot":"","sources":["../../../../core/EVM/permits/getNativePermit.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAO,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"getNativePermit.d.ts","sourceRoot":"","sources":["../../../../core/EVM/permits/getNativePermit.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAO,MAAM,MAAM,CAAA;AAYhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAqGD,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,cAAc,OAAO;;;;;;cAkHtB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,mDAAmD,qBAAqB,KACvE,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAwCtC,CAAA"}
|
package/src/_types/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,cAAc,CAAA;AAC/B,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,cAAc,CAAA;AAC/B,eAAO,MAAM,OAAO,kBAAkB,CAAA"}
|
|
@@ -586,7 +586,10 @@ export class EVMStepExecutor extends BaseStepExecutor {
|
|
|
586
586
|
? transactionRequest.gas
|
|
587
587
|
: estimatedGas
|
|
588
588
|
} catch (_) {
|
|
589
|
-
//
|
|
589
|
+
// If we fail to estimate the gas, we add 80_000 gas units Permit buffer to the gas limit
|
|
590
|
+
if (transactionRequest.gas) {
|
|
591
|
+
transactionRequest.gas = transactionRequest.gas + 80_000n
|
|
592
|
+
}
|
|
590
593
|
} finally {
|
|
591
594
|
this.statusManager.updateProcess(step, process.type, 'DONE')
|
|
592
595
|
}
|
package/src/core/EVM/abi.ts
CHANGED
|
@@ -13,6 +13,7 @@ export const eip2612Abi = parseAbi([
|
|
|
13
13
|
'function nonces(address) external view returns (uint256)',
|
|
14
14
|
'function name() external view returns (string)',
|
|
15
15
|
'function version() external view returns (string)',
|
|
16
|
+
'function PERMIT_TYPEHASH() external view returns (bytes32)',
|
|
16
17
|
])
|
|
17
18
|
|
|
18
19
|
export const approveAbi = parseAbi([
|
|
@@ -30,15 +31,3 @@ export const getEthBalanceAbi = parseAbi([
|
|
|
30
31
|
export const balanceOfAbi = parseAbi([
|
|
31
32
|
'function balanceOf(address) external view returns (uint256)',
|
|
32
33
|
])
|
|
33
|
-
|
|
34
|
-
// EIP-2612 types
|
|
35
|
-
// https://eips.ethereum.org/EIPS/eip-2612
|
|
36
|
-
export const eip2612Types = {
|
|
37
|
-
Permit: [
|
|
38
|
-
{ name: 'owner', type: 'address' },
|
|
39
|
-
{ name: 'spender', type: 'address' },
|
|
40
|
-
{ name: 'value', type: 'uint256' },
|
|
41
|
-
{ name: 'nonce', type: 'uint256' },
|
|
42
|
-
{ name: 'deadline', type: 'uint256' },
|
|
43
|
-
],
|
|
44
|
-
} as const
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Hex } from 'viem'
|
|
1
2
|
import { MaxUint48, MaxUint160, MaxUint256 } from '../../../constants.js'
|
|
2
3
|
|
|
3
4
|
export const MaxAllowanceTransferAmount = MaxUint160
|
|
@@ -9,3 +10,73 @@ export const MaxUnorderedNonce = MaxUint256
|
|
|
9
10
|
export const MaxSigDeadline = MaxUint256
|
|
10
11
|
|
|
11
12
|
export const InstantExpiration = 0n
|
|
13
|
+
|
|
14
|
+
export const EIP_2612_PERMIT_SELECTOR = '0xd505accf'
|
|
15
|
+
export const DAI_PERMIT_SELECTOR = '0x8fcbaf0c'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* EIP-712 domain typehash with chainId
|
|
19
|
+
* @link https://eips.ethereum.org/EIPS/eip-712#specification
|
|
20
|
+
*
|
|
21
|
+
* keccak256(toBytes(
|
|
22
|
+
* 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'
|
|
23
|
+
* ))
|
|
24
|
+
*/
|
|
25
|
+
export const EIP712_DOMAIN_TYPEHASH =
|
|
26
|
+
'0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f' as Hex
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* EIP-712 domain typehash with salt (e.g. USDC.e on Polygon)
|
|
30
|
+
* @link https://eips.ethereum.org/EIPS/eip-712#specification
|
|
31
|
+
*
|
|
32
|
+
* keccak256(toBytes(
|
|
33
|
+
* 'EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)'
|
|
34
|
+
* ))
|
|
35
|
+
*/
|
|
36
|
+
export const EIP712_DOMAIN_TYPEHASH_WITH_SALT =
|
|
37
|
+
'0x36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab7' as Hex
|
|
38
|
+
|
|
39
|
+
export const EIP712_DOMAINS_WITHOUT_VERSION = [
|
|
40
|
+
/** @signature 'EIP712Domain(string name,uint chainId,address verifyingContract)' */
|
|
41
|
+
'0x797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f35' as Hex,
|
|
42
|
+
/** @signature 'EIP712Domain(string name,uint256 chainId,address verifyingContract)' */
|
|
43
|
+
'0x8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866' as Hex,
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @signature Permit(address holder,address spender,uint256 nonce,uint256 expiry,bool allowed)
|
|
48
|
+
* */
|
|
49
|
+
export const DAI_LIKE_PERMIT_TYPEHASH =
|
|
50
|
+
'0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb' as Hex
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @example `${tokenAddress}:${chainId}.toLowerCase()`
|
|
54
|
+
* @warning Only toLowerCase string
|
|
55
|
+
* */
|
|
56
|
+
export const TOKEN_ADDRESSES_WITH_SALT = [
|
|
57
|
+
'0x2791bca1f2de4661ed88a30c99a7a9449aa84174:137', // USDC Proxy Polygon
|
|
58
|
+
'0x8f3cf7ad23cd3cadbd9735aff958023239c6a063:137', // DAI Proxy Polygon
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
// EIP-2612 types
|
|
62
|
+
// https://eips.ethereum.org/EIPS/eip-2612
|
|
63
|
+
export const eip2612Types = {
|
|
64
|
+
Permit: [
|
|
65
|
+
{ name: 'owner', type: 'address' },
|
|
66
|
+
{ name: 'spender', type: 'address' },
|
|
67
|
+
{ name: 'value', type: 'uint256' },
|
|
68
|
+
{ name: 'nonce', type: 'uint256' },
|
|
69
|
+
{ name: 'deadline', type: 'uint256' },
|
|
70
|
+
],
|
|
71
|
+
} as const
|
|
72
|
+
|
|
73
|
+
// DAI on Ethereum
|
|
74
|
+
export const daiPermitTypes = {
|
|
75
|
+
Permit: [
|
|
76
|
+
{ name: 'holder', type: 'address' },
|
|
77
|
+
{ name: 'spender', type: 'address' },
|
|
78
|
+
{ name: 'nonce', type: 'uint256' },
|
|
79
|
+
{ name: 'expiry', type: 'uint256' },
|
|
80
|
+
{ name: 'allowed', type: 'bool' },
|
|
81
|
+
],
|
|
82
|
+
} as const
|