@lifi/sdk 3.6.0-beta.5 → 3.6.0-beta.6
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 +3 -3
- package/src/_cjs/config.js +3 -0
- package/src/_cjs/config.js.map +1 -1
- package/src/_cjs/core/EVM/EVM.js +4 -0
- package/src/_cjs/core/EVM/EVM.js.map +1 -1
- package/src/_cjs/core/EVM/EVMStepExecutor.js +136 -112
- package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -1
- package/src/_cjs/core/EVM/checkAllowance.js +34 -5
- package/src/_cjs/core/EVM/checkAllowance.js.map +1 -1
- package/src/_cjs/core/EVM/checkPermitSupport.js +33 -0
- package/src/_cjs/core/EVM/checkPermitSupport.js.map +1 -0
- package/src/_cjs/core/EVM/parseEVMErrors.js +3 -0
- package/src/_cjs/core/EVM/parseEVMErrors.js.map +1 -1
- package/src/_cjs/core/EVM/{permit2 → permits}/allowanceTransfer.js.map +1 -1
- package/src/_cjs/core/EVM/{permit2 → permits}/constants.js.map +1 -1
- package/src/_cjs/core/EVM/{permit2 → permits}/domain.js.map +1 -1
- package/src/_cjs/core/EVM/permits/encodeNativePermitData.js +16 -0
- package/src/_cjs/core/EVM/permits/encodeNativePermitData.js.map +1 -0
- package/src/_cjs/core/EVM/permits/encodePermit2Data.js +32 -0
- package/src/_cjs/core/EVM/permits/encodePermit2Data.js.map +1 -0
- package/src/_cjs/core/EVM/{getNativePermit.js → permits/getNativePermit.js} +30 -21
- package/src/_cjs/core/EVM/permits/getNativePermit.js.map +1 -0
- package/src/_cjs/core/EVM/permits/getPermitTransferFromValues.js +24 -0
- package/src/_cjs/core/EVM/permits/getPermitTransferFromValues.js.map +1 -0
- package/src/_cjs/core/EVM/permits/signNativePermitMessage.js +20 -0
- package/src/_cjs/core/EVM/permits/signNativePermitMessage.js.map +1 -0
- package/src/_cjs/core/EVM/permits/signPermit2Message.js +43 -0
- package/src/_cjs/core/EVM/permits/signPermit2Message.js.map +1 -0
- package/src/_cjs/core/EVM/permits/signatureTransfer.js.map +1 -0
- package/src/_cjs/core/EVM/permits/types.js +3 -0
- package/src/_cjs/core/EVM/permits/types.js.map +1 -0
- package/src/_cjs/core/EVM/permits/utils.js +31 -0
- package/src/_cjs/core/EVM/permits/utils.js.map +1 -0
- package/src/_cjs/core/EVM/publicClient.js +32 -33
- package/src/_cjs/core/EVM/publicClient.js.map +1 -1
- package/src/_cjs/core/EVM/typeguards.js +1 -1
- package/src/_cjs/core/EVM/typeguards.js.map +1 -1
- package/src/_cjs/core/EVM/types.js.map +1 -1
- package/src/_cjs/core/EVM/waitForBatchTransactionReceipt.js +3 -2
- package/src/_cjs/core/EVM/waitForBatchTransactionReceipt.js.map +1 -1
- package/src/_cjs/core/EVM/waitForRelayedTransactionReceipt.js +4 -4
- package/src/_cjs/core/EVM/waitForRelayedTransactionReceipt.js.map +1 -1
- package/src/_cjs/core/checkBalance.js +2 -1
- package/src/_cjs/core/checkBalance.js.map +1 -1
- package/src/_cjs/core/utils.js +1 -1
- package/src/_cjs/core/utils.js.map +1 -1
- package/src/_cjs/errors/constants.js +1 -0
- package/src/_cjs/errors/constants.js.map +1 -1
- package/src/_cjs/services/api.js +18 -6
- package/src/_cjs/services/api.js.map +1 -1
- package/src/_cjs/version.js +1 -1
- package/src/_esm/config.js +3 -0
- package/src/_esm/config.js.map +1 -1
- package/src/_esm/core/EVM/EVM.js +4 -0
- package/src/_esm/core/EVM/EVM.js.map +1 -1
- package/src/_esm/core/EVM/EVMStepExecutor.js +140 -124
- package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -1
- package/src/_esm/core/EVM/checkAllowance.js +35 -5
- package/src/_esm/core/EVM/checkAllowance.js.map +1 -1
- package/src/_esm/core/EVM/checkPermitSupport.js +43 -0
- package/src/_esm/core/EVM/checkPermitSupport.js.map +1 -0
- package/src/_esm/core/EVM/parseEVMErrors.js +9 -0
- package/src/_esm/core/EVM/parseEVMErrors.js.map +1 -1
- package/src/_esm/core/EVM/{permit2 → permits}/allowanceTransfer.js.map +1 -1
- package/src/_esm/core/EVM/{permit2 → permits}/constants.js.map +1 -1
- package/src/_esm/core/EVM/{permit2 → permits}/domain.js.map +1 -1
- package/src/_esm/core/EVM/permits/encodeNativePermitData.js +12 -0
- package/src/_esm/core/EVM/permits/encodeNativePermitData.js.map +1 -0
- package/src/_esm/core/EVM/permits/encodePermit2Data.js +28 -0
- package/src/_esm/core/EVM/permits/encodePermit2Data.js.map +1 -0
- package/src/_esm/core/EVM/{getNativePermit.js → permits/getNativePermit.js} +30 -21
- package/src/_esm/core/EVM/permits/getNativePermit.js.map +1 -0
- package/src/_esm/core/EVM/permits/getPermitTransferFromValues.js +20 -0
- package/src/_esm/core/EVM/permits/getPermitTransferFromValues.js.map +1 -0
- package/src/_esm/core/EVM/permits/signNativePermitMessage.js +16 -0
- package/src/_esm/core/EVM/permits/signNativePermitMessage.js.map +1 -0
- package/src/_esm/core/EVM/permits/signPermit2Message.js +41 -0
- package/src/_esm/core/EVM/permits/signPermit2Message.js.map +1 -0
- package/src/_esm/core/EVM/{permit2 → permits}/signatureTransfer.js +0 -2
- package/src/_esm/core/EVM/{permit2 → permits}/signatureTransfer.js.map +1 -1
- package/src/_esm/core/EVM/permits/types.js +2 -0
- package/src/_esm/core/EVM/permits/types.js.map +1 -0
- package/src/_esm/core/EVM/permits/utils.js +26 -0
- package/src/_esm/core/EVM/permits/utils.js.map +1 -0
- package/src/_esm/core/EVM/publicClient.js +34 -35
- package/src/_esm/core/EVM/publicClient.js.map +1 -1
- package/src/_esm/core/EVM/typeguards.js +1 -1
- package/src/_esm/core/EVM/typeguards.js.map +1 -1
- package/src/_esm/core/EVM/types.js.map +1 -1
- package/src/_esm/core/EVM/waitForBatchTransactionReceipt.js +5 -2
- package/src/_esm/core/EVM/waitForBatchTransactionReceipt.js.map +1 -1
- package/src/_esm/core/EVM/waitForRelayedTransactionReceipt.js +4 -4
- package/src/_esm/core/EVM/waitForRelayedTransactionReceipt.js.map +1 -1
- package/src/_esm/core/checkBalance.js +2 -1
- package/src/_esm/core/checkBalance.js.map +1 -1
- package/src/_esm/core/utils.js +1 -1
- package/src/_esm/core/utils.js.map +1 -1
- package/src/_esm/errors/constants.js +1 -0
- package/src/_esm/errors/constants.js.map +1 -1
- package/src/_esm/services/api.js +18 -6
- package/src/_esm/services/api.js.map +1 -1
- package/src/_esm/version.js +1 -1
- package/src/_types/config.d.ts +2 -1
- package/src/_types/config.d.ts.map +1 -1
- package/src/_types/core/BaseStepExecutor.d.ts.map +1 -1
- package/src/_types/core/EVM/EVM.d.ts.map +1 -1
- package/src/_types/core/EVM/EVMStepExecutor.d.ts +4 -10
- package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -1
- package/src/_types/core/EVM/checkAllowance.d.ts +13 -2
- package/src/_types/core/EVM/checkAllowance.d.ts.map +1 -1
- package/src/_types/core/EVM/checkPermitSupport.d.ts +27 -0
- package/src/_types/core/EVM/checkPermitSupport.d.ts.map +1 -0
- package/src/_types/core/EVM/getAllowance.d.ts.map +1 -1
- package/src/_types/core/EVM/getENSAddress.d.ts.map +1 -1
- package/src/_types/core/EVM/getEVMBalance.d.ts.map +1 -1
- package/src/_types/core/EVM/parseEVMErrors.d.ts.map +1 -1
- package/src/_types/core/EVM/{permit2 → permits}/allowanceTransfer.d.ts.map +1 -1
- package/src/_types/core/EVM/{permit2 → permits}/constants.d.ts.map +1 -1
- package/src/_types/core/EVM/permits/domain.d.ts +3 -0
- package/src/_types/core/EVM/permits/domain.d.ts.map +1 -0
- package/src/_types/core/EVM/permits/encodeNativePermitData.d.ts +3 -0
- package/src/_types/core/EVM/permits/encodeNativePermitData.d.ts.map +1 -0
- package/src/_types/core/EVM/permits/encodePermit2Data.d.ts +4 -0
- package/src/_types/core/EVM/permits/encodePermit2Data.d.ts.map +1 -0
- package/src/_types/core/EVM/{getNativePermit.d.ts → permits/getNativePermit.d.ts} +2 -9
- package/src/_types/core/EVM/permits/getNativePermit.d.ts.map +1 -0
- package/src/_types/core/EVM/permits/getPermitTransferFromValues.d.ts +5 -0
- package/src/_types/core/EVM/permits/getPermitTransferFromValues.d.ts.map +1 -0
- package/src/_types/core/EVM/permits/signNativePermitMessage.d.ts +4 -0
- package/src/_types/core/EVM/permits/signNativePermitMessage.d.ts.map +1 -0
- package/src/_types/core/EVM/permits/signPermit2Message.d.ts +21 -0
- package/src/_types/core/EVM/permits/signPermit2Message.d.ts.map +1 -0
- package/src/_types/core/EVM/{permit2 → permits}/signatureTransfer.d.ts +15 -16
- package/src/_types/core/EVM/permits/signatureTransfer.d.ts.map +1 -0
- package/src/_types/core/EVM/permits/types.d.ts +24 -0
- package/src/_types/core/EVM/permits/types.d.ts.map +1 -0
- package/src/_types/core/EVM/permits/utils.d.ts +6 -0
- package/src/_types/core/EVM/permits/utils.d.ts.map +1 -0
- package/src/_types/core/EVM/publicClient.d.ts.map +1 -1
- package/src/_types/core/EVM/setAllowance.d.ts.map +1 -1
- package/src/_types/core/EVM/switchChain.d.ts.map +1 -1
- package/src/_types/core/EVM/typeguards.d.ts +2 -1
- package/src/_types/core/EVM/typeguards.d.ts.map +1 -1
- package/src/_types/core/EVM/types.d.ts +13 -7
- package/src/_types/core/EVM/types.d.ts.map +1 -1
- package/src/_types/core/EVM/utils.d.ts.map +1 -1
- package/src/_types/core/EVM/waitForBatchTransactionReceipt.d.ts.map +1 -1
- package/src/_types/core/EVM/waitForRelayedTransactionReceipt.d.ts.map +1 -1
- package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -1
- package/src/_types/core/Solana/getSNSAddress.d.ts.map +1 -1
- package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -1
- package/src/_types/core/Solana/parseSolanaErrors.d.ts.map +1 -1
- package/src/_types/core/StatusManager.d.ts.map +1 -1
- package/src/_types/core/UTXO/UTXOStepExecutor.d.ts.map +1 -1
- package/src/_types/core/UTXO/getUTXOAPIPublicClient.d.ts.map +1 -1
- package/src/_types/core/UTXO/getUTXOBalance.d.ts.map +1 -1
- package/src/_types/core/UTXO/getUTXOPublicClient.d.ts.map +1 -1
- package/src/_types/core/UTXO/parseUTXOErrors.d.ts.map +1 -1
- package/src/_types/core/checkBalance.d.ts.map +1 -1
- package/src/_types/core/execution.d.ts.map +1 -1
- package/src/_types/core/prepareRestart.d.ts.map +1 -1
- package/src/_types/core/provider.d.ts.map +1 -1
- package/src/_types/core/rpc.d.ts.map +1 -1
- package/src/_types/core/stepComparison.d.ts.map +1 -1
- package/src/_types/errors/constants.d.ts +2 -1
- package/src/_types/errors/constants.d.ts.map +1 -1
- package/src/_types/errors/utils/baseErrorRootCause.d.ts.map +1 -1
- package/src/_types/errors/utils/rootCause.d.ts.map +1 -1
- package/src/_types/request.d.ts.map +1 -1
- package/src/_types/services/api.d.ts +4 -47
- package/src/_types/services/api.d.ts.map +1 -1
- package/src/_types/services/balance.d.ts.map +1 -1
- package/src/_types/services/getNameServiceAddress.d.ts.map +1 -1
- package/src/_types/typeguards.d.ts.map +1 -1
- package/src/_types/utils/checkPackageUpdates.d.ts.map +1 -1
- package/src/_types/utils/convertQuoteToRoute.d.ts.map +1 -1
- package/src/_types/utils/fetchTxErrorDetails.d.ts.map +1 -1
- package/src/_types/utils/getTransactionMessage.d.ts.map +1 -1
- package/src/_types/utils/isZeroAddress.d.ts.map +1 -1
- package/src/_types/utils/median.d.ts.map +1 -1
- package/src/_types/utils/waitForResult.d.ts.map +1 -1
- package/src/_types/version.d.ts +1 -1
- package/src/config.ts +4 -1
- package/src/core/EVM/EVM.ts +4 -0
- package/src/core/EVM/EVMStepExecutor.ts +186 -149
- package/src/core/EVM/checkAllowance.ts +69 -6
- package/src/core/EVM/checkPermitSupport.ts +74 -0
- package/src/core/EVM/parseEVMErrors.ts +9 -0
- package/src/core/EVM/{permit2 → permits}/domain.ts +1 -7
- package/src/core/EVM/permits/encodeNativePermitData.ts +19 -0
- package/src/core/EVM/permits/encodePermit2Data.ts +41 -0
- package/src/core/EVM/{getNativePermit.ts → permits/getNativePermit.ts} +37 -31
- package/src/core/EVM/permits/getPermitTransferFromValues.ts +29 -0
- package/src/core/EVM/permits/signNativePermitMessage.ts +27 -0
- package/src/core/EVM/permits/signPermit2Message.ts +95 -0
- package/src/core/EVM/{permit2 → permits}/signatureTransfer.ts +19 -7
- package/src/core/EVM/permits/types.ts +33 -0
- package/src/core/EVM/permits/utils.ts +40 -0
- package/src/core/EVM/publicClient.ts +41 -38
- package/src/core/EVM/typeguards.ts +5 -2
- package/src/core/EVM/types.ts +15 -10
- package/src/core/EVM/waitForBatchTransactionReceipt.ts +7 -2
- package/src/core/EVM/waitForRelayedTransactionReceipt.ts +4 -4
- package/src/core/checkBalance.ts +2 -1
- package/src/core/utils.ts +1 -1
- package/src/errors/constants.ts +1 -0
- package/src/services/api.ts +62 -66
- package/src/version.ts +1 -1
- package/src/_cjs/core/EVM/getNativePermit.js.map +0 -1
- package/src/_cjs/core/EVM/permit2/signatureTransfer.js.map +0 -1
- package/src/_cjs/core/EVM/signPermitMessage.js +0 -163
- package/src/_cjs/core/EVM/signPermitMessage.js.map +0 -1
- package/src/_esm/core/EVM/getNativePermit.js.map +0 -1
- package/src/_esm/core/EVM/signPermitMessage.js +0 -157
- package/src/_esm/core/EVM/signPermitMessage.js.map +0 -1
- package/src/_types/core/EVM/getNativePermit.d.ts.map +0 -1
- package/src/_types/core/EVM/permit2/domain.d.ts +0 -8
- package/src/_types/core/EVM/permit2/domain.d.ts.map +0 -1
- package/src/_types/core/EVM/permit2/signatureTransfer.d.ts.map +0 -1
- package/src/_types/core/EVM/signPermitMessage.d.ts +0 -25
- package/src/_types/core/EVM/signPermitMessage.d.ts.map +0 -1
- package/src/core/EVM/signPermitMessage.ts +0 -273
- /package/src/_cjs/core/EVM/{permit2 → permits}/allowanceTransfer.js +0 -0
- /package/src/_cjs/core/EVM/{permit2 → permits}/constants.js +0 -0
- /package/src/_cjs/core/EVM/{permit2 → permits}/domain.js +0 -0
- /package/src/_cjs/core/EVM/{permit2 → permits}/signatureTransfer.js +0 -0
- /package/src/_esm/core/EVM/{permit2 → permits}/allowanceTransfer.js +0 -0
- /package/src/_esm/core/EVM/{permit2 → permits}/constants.js +0 -0
- /package/src/_esm/core/EVM/{permit2 → permits}/domain.js +0 -0
- /package/src/_types/core/EVM/{permit2 → permits}/allowanceTransfer.d.ts +0 -0
- /package/src/_types/core/EVM/{permit2 → permits}/constants.d.ts +0 -0
- /package/src/core/EVM/{permit2 → permits}/allowanceTransfer.ts +0 -0
- /package/src/core/EVM/{permit2 → permits}/constants.ts +0 -0
|
@@ -41,6 +41,15 @@ const handleSpecificErrors = async (
|
|
|
41
41
|
if (e.cause?.code === -32000) {
|
|
42
42
|
return new TransactionError(LiFiErrorCode.SignatureRejected, e.message, e)
|
|
43
43
|
}
|
|
44
|
+
// Some wallets reject transactions sometimes with this code because of internal and JSON-RPC errors, e.g.:
|
|
45
|
+
// {
|
|
46
|
+
// "code": -32603,
|
|
47
|
+
// "message": "Pop up window failed to open",
|
|
48
|
+
// "docUrl": "https://docs.cloud.coinbase.com/wallet-sdk/docs/errors"
|
|
49
|
+
// }
|
|
50
|
+
if (e.cause?.code === -32603) {
|
|
51
|
+
return new TransactionError(LiFiErrorCode.TransactionRejected, e.message, e)
|
|
52
|
+
}
|
|
44
53
|
|
|
45
54
|
if (
|
|
46
55
|
step &&
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Address,
|
|
1
|
+
import type { Address, TypedDataDomain } from 'viem'
|
|
2
2
|
|
|
3
3
|
const PERMIT2_DOMAIN_NAME = 'Permit2'
|
|
4
4
|
|
|
@@ -12,9 +12,3 @@ export function permit2Domain(
|
|
|
12
12
|
verifyingContract: permit2Address,
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
export type PermitData = {
|
|
17
|
-
domain: TypedDataDomain
|
|
18
|
-
types: TypedData
|
|
19
|
-
values: any
|
|
20
|
-
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Address, Hash, Hex } from 'viem'
|
|
2
|
+
import { encodeFunctionData, parseSignature } from 'viem'
|
|
3
|
+
import { permit2ProxyAbi } from '../abi.js'
|
|
4
|
+
|
|
5
|
+
export const encodeNativePermitData = (
|
|
6
|
+
tokenAddress: Address,
|
|
7
|
+
amount: bigint,
|
|
8
|
+
deadline: bigint,
|
|
9
|
+
signature: Hash,
|
|
10
|
+
transactionData: Hex
|
|
11
|
+
): Hex => {
|
|
12
|
+
const { v, r, s } = parseSignature(signature)
|
|
13
|
+
const data = encodeFunctionData({
|
|
14
|
+
abi: permit2ProxyAbi,
|
|
15
|
+
functionName: 'callDiamondWithEIP2612Signature',
|
|
16
|
+
args: [tokenAddress, amount, deadline, Number(v), r, s, transactionData],
|
|
17
|
+
})
|
|
18
|
+
return data
|
|
19
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Address, Hex } from 'viem'
|
|
2
|
+
import { type Hash, encodeFunctionData } from 'viem'
|
|
3
|
+
import { permit2ProxyAbi } from '../abi.js'
|
|
4
|
+
|
|
5
|
+
export const encodePermit2Data = (
|
|
6
|
+
tokenAddress: Address,
|
|
7
|
+
amount: bigint,
|
|
8
|
+
nonce: bigint,
|
|
9
|
+
deadline: bigint,
|
|
10
|
+
transactionData: Hex,
|
|
11
|
+
signature: Hash,
|
|
12
|
+
accountAddress?: Address,
|
|
13
|
+
witness?: boolean
|
|
14
|
+
): Hex => {
|
|
15
|
+
if (witness && accountAddress) {
|
|
16
|
+
const data = encodeFunctionData({
|
|
17
|
+
abi: permit2ProxyAbi,
|
|
18
|
+
functionName: 'callDiamondWithPermit2Witness',
|
|
19
|
+
args: [
|
|
20
|
+
transactionData,
|
|
21
|
+
accountAddress,
|
|
22
|
+
[[tokenAddress, amount], nonce, deadline],
|
|
23
|
+
signature as Hex,
|
|
24
|
+
],
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
return data
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const data = encodeFunctionData({
|
|
31
|
+
abi: permit2ProxyAbi,
|
|
32
|
+
functionName: 'callDiamondWithPermit2',
|
|
33
|
+
args: [
|
|
34
|
+
transactionData,
|
|
35
|
+
[[tokenAddress, amount], nonce, deadline],
|
|
36
|
+
signature as Hex,
|
|
37
|
+
],
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
return data
|
|
41
|
+
}
|
|
@@ -10,16 +10,9 @@ import {
|
|
|
10
10
|
import type { Address, Client, Hex } from 'viem'
|
|
11
11
|
import type { TypedDataDomain } from 'viem'
|
|
12
12
|
import { multicall, readContract } from 'viem/actions'
|
|
13
|
-
import { eip2612Abi } from '
|
|
14
|
-
import { getMulticallAddress } from '
|
|
15
|
-
|
|
16
|
-
export type NativePermitData = {
|
|
17
|
-
name: string
|
|
18
|
-
version: string
|
|
19
|
-
nonce: bigint
|
|
20
|
-
supported: boolean
|
|
21
|
-
domain: TypedDataDomain
|
|
22
|
-
}
|
|
13
|
+
import { eip2612Abi, eip2612Types } from '../abi.js'
|
|
14
|
+
import { getMulticallAddress } from '../utils.js'
|
|
15
|
+
import type { NativePermitData } from './types.js'
|
|
23
16
|
|
|
24
17
|
/**
|
|
25
18
|
* EIP-712 domain typehash with chainId
|
|
@@ -142,14 +135,6 @@ function validateDomainSeparator({
|
|
|
142
135
|
}
|
|
143
136
|
}
|
|
144
137
|
|
|
145
|
-
const defaultPermit: NativePermitData = {
|
|
146
|
-
name: '',
|
|
147
|
-
version: '1',
|
|
148
|
-
nonce: 0n,
|
|
149
|
-
supported: false,
|
|
150
|
-
domain: {},
|
|
151
|
-
}
|
|
152
|
-
|
|
153
138
|
/**
|
|
154
139
|
* Retrieves native permit data (EIP-2612) for a token on a specific chain
|
|
155
140
|
* @link https://eips.ethereum.org/EIPS/eip-2612
|
|
@@ -161,8 +146,9 @@ const defaultPermit: NativePermitData = {
|
|
|
161
146
|
export const getNativePermit = async (
|
|
162
147
|
client: Client,
|
|
163
148
|
chain: ExtendedChain,
|
|
164
|
-
tokenAddress: Address
|
|
165
|
-
|
|
149
|
+
tokenAddress: Address,
|
|
150
|
+
amount: bigint
|
|
151
|
+
): Promise<NativePermitData | undefined> => {
|
|
166
152
|
try {
|
|
167
153
|
const multicallAddress = await getMulticallAddress(chain.id)
|
|
168
154
|
|
|
@@ -205,7 +191,7 @@ export const getNativePermit = async (
|
|
|
205
191
|
!domainSeparatorResult.result ||
|
|
206
192
|
noncesResult.result === undefined
|
|
207
193
|
) {
|
|
208
|
-
return
|
|
194
|
+
return undefined
|
|
209
195
|
}
|
|
210
196
|
|
|
211
197
|
const { isValid, domain } = validateDomainSeparator({
|
|
@@ -216,12 +202,22 @@ export const getNativePermit = async (
|
|
|
216
202
|
domainSeparator: domainSeparatorResult.result,
|
|
217
203
|
})
|
|
218
204
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
205
|
+
if (!isValid) {
|
|
206
|
+
return undefined
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const values = {
|
|
210
|
+
owner: client.account!.address,
|
|
211
|
+
spender: chain.permit2Proxy as Address,
|
|
212
|
+
value: amount,
|
|
222
213
|
nonce: noncesResult.result,
|
|
223
|
-
|
|
214
|
+
deadline: BigInt(Math.floor(Date.now() / 1000) + 30 * 60), // 30 minutes
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return {
|
|
224
218
|
domain,
|
|
219
|
+
types: eip2612Types,
|
|
220
|
+
values,
|
|
225
221
|
}
|
|
226
222
|
}
|
|
227
223
|
|
|
@@ -240,7 +236,7 @@ export const getNativePermit = async (
|
|
|
240
236
|
domainSeparatorResult.status !== 'fulfilled' ||
|
|
241
237
|
noncesResult.status !== 'fulfilled'
|
|
242
238
|
) {
|
|
243
|
-
return
|
|
239
|
+
return undefined
|
|
244
240
|
}
|
|
245
241
|
|
|
246
242
|
const name = nameResult.value
|
|
@@ -254,14 +250,24 @@ export const getNativePermit = async (
|
|
|
254
250
|
domainSeparator: domainSeparatorResult.value,
|
|
255
251
|
})
|
|
256
252
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
253
|
+
if (!isValid) {
|
|
254
|
+
return undefined
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const values = {
|
|
258
|
+
owner: client.account!.address,
|
|
259
|
+
spender: chain.permit2Proxy as Address,
|
|
260
|
+
value: amount,
|
|
260
261
|
nonce: noncesResult.value,
|
|
261
|
-
|
|
262
|
+
deadline: BigInt(Math.floor(Date.now() / 1000) + 30 * 60), // 30 minutes
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return {
|
|
262
266
|
domain,
|
|
267
|
+
types: eip2612Types,
|
|
268
|
+
values,
|
|
263
269
|
}
|
|
264
270
|
} catch {
|
|
265
|
-
return
|
|
271
|
+
return undefined
|
|
266
272
|
}
|
|
267
273
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ExtendedChain } from '@lifi/types'
|
|
2
|
+
import type { Address, Client } from 'viem'
|
|
3
|
+
import { readContract } from 'viem/actions'
|
|
4
|
+
import { permit2ProxyAbi } from '../abi.js'
|
|
5
|
+
import type { PermitTransferFrom } from './signatureTransfer.js'
|
|
6
|
+
|
|
7
|
+
export const getPermitTransferFromValues = async (
|
|
8
|
+
client: Client,
|
|
9
|
+
chain: ExtendedChain,
|
|
10
|
+
tokenAddress: Address,
|
|
11
|
+
amount: bigint
|
|
12
|
+
): Promise<PermitTransferFrom> => {
|
|
13
|
+
const nonce = await readContract(client, {
|
|
14
|
+
address: chain.permit2Proxy as Address,
|
|
15
|
+
abi: permit2ProxyAbi,
|
|
16
|
+
functionName: 'nextNonce',
|
|
17
|
+
args: [client.account!.address],
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
return {
|
|
21
|
+
permitted: {
|
|
22
|
+
token: tokenAddress,
|
|
23
|
+
amount: amount,
|
|
24
|
+
},
|
|
25
|
+
spender: chain.permit2Proxy as Address,
|
|
26
|
+
nonce: nonce,
|
|
27
|
+
deadline: BigInt(Math.floor(Date.now() / 1000) + 30 * 60), // 30 minutes
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type {} from '@lifi/types'
|
|
2
|
+
import type { Client } from 'viem'
|
|
3
|
+
import { signTypedData } from 'viem/actions'
|
|
4
|
+
import { getAction } from 'viem/utils'
|
|
5
|
+
import type { NativePermitData, NativePermitSignature } from './types.js'
|
|
6
|
+
|
|
7
|
+
export const signNativePermitMessage = async (
|
|
8
|
+
client: Client,
|
|
9
|
+
permitData: NativePermitData
|
|
10
|
+
): Promise<NativePermitSignature> => {
|
|
11
|
+
const signature = await getAction(
|
|
12
|
+
client,
|
|
13
|
+
signTypedData,
|
|
14
|
+
'signTypedData'
|
|
15
|
+
)({
|
|
16
|
+
account: client.account!,
|
|
17
|
+
domain: permitData.domain,
|
|
18
|
+
types: permitData.types,
|
|
19
|
+
primaryType: 'Permit',
|
|
20
|
+
message: permitData.values,
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
signature,
|
|
25
|
+
values: permitData.values,
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { ExtendedChain } from '@lifi/types'
|
|
2
|
+
import type { Address, Client, Hex } from 'viem'
|
|
3
|
+
import { keccak256 } from 'viem'
|
|
4
|
+
import { signTypedData } from 'viem/actions'
|
|
5
|
+
import { getAction } from 'viem/utils'
|
|
6
|
+
import { getPermitTransferFromValues } from './getPermitTransferFromValues.js'
|
|
7
|
+
import {
|
|
8
|
+
type PermitBatchTransferFrom,
|
|
9
|
+
type PermitBatchTransferFromData,
|
|
10
|
+
type PermitTransferFrom,
|
|
11
|
+
type PermitTransferFromData,
|
|
12
|
+
getPermitData,
|
|
13
|
+
} from './signatureTransfer.js'
|
|
14
|
+
import type { Permit2Signature } from './types.js'
|
|
15
|
+
|
|
16
|
+
export interface SignPermit2MessageParams {
|
|
17
|
+
client: Client
|
|
18
|
+
chain: ExtendedChain
|
|
19
|
+
tokenAddress: Address
|
|
20
|
+
amount: bigint
|
|
21
|
+
data: Hex
|
|
22
|
+
witness?: boolean
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface SignPermit2SingleParams extends SignPermit2MessageParams {
|
|
26
|
+
permitData?: PermitTransferFromData
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface SignPermit2BatchParams extends SignPermit2MessageParams {
|
|
30
|
+
permitData?: PermitBatchTransferFromData
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function signPermit2Message(
|
|
34
|
+
params: SignPermit2SingleParams
|
|
35
|
+
): Promise<Permit2Signature<PermitTransferFrom>>
|
|
36
|
+
export function signPermit2Message(
|
|
37
|
+
params: SignPermit2BatchParams
|
|
38
|
+
): Promise<Permit2Signature<PermitBatchTransferFrom>>
|
|
39
|
+
export async function signPermit2Message(
|
|
40
|
+
params: SignPermit2SingleParams | SignPermit2BatchParams
|
|
41
|
+
): Promise<Permit2Signature<PermitTransferFrom | PermitBatchTransferFrom>> {
|
|
42
|
+
const { client, chain, tokenAddress, amount, data, permitData, witness } =
|
|
43
|
+
params
|
|
44
|
+
|
|
45
|
+
let _permitData = permitData
|
|
46
|
+
if (!_permitData) {
|
|
47
|
+
const permitTransferFrom = await getPermitTransferFromValues(
|
|
48
|
+
client,
|
|
49
|
+
chain,
|
|
50
|
+
tokenAddress,
|
|
51
|
+
amount
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
// Create witness data for the LI.FI call
|
|
55
|
+
const _witness = witness
|
|
56
|
+
? {
|
|
57
|
+
witness: {
|
|
58
|
+
diamondAddress: chain.diamondAddress as Address,
|
|
59
|
+
diamondCalldataHash: keccak256(data),
|
|
60
|
+
},
|
|
61
|
+
witnessTypeName: 'LiFiCall',
|
|
62
|
+
witnessType: {
|
|
63
|
+
LiFiCall: [
|
|
64
|
+
{ name: 'diamondAddress', type: 'address' },
|
|
65
|
+
{ name: 'diamondCalldataHash', type: 'bytes32' },
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
}
|
|
69
|
+
: undefined
|
|
70
|
+
|
|
71
|
+
_permitData = getPermitData(
|
|
72
|
+
permitTransferFrom,
|
|
73
|
+
chain.permit2 as Address,
|
|
74
|
+
chain.id,
|
|
75
|
+
_witness
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const signature = await getAction(
|
|
80
|
+
client,
|
|
81
|
+
signTypedData,
|
|
82
|
+
'signTypedData'
|
|
83
|
+
)({
|
|
84
|
+
account: client.account!,
|
|
85
|
+
primaryType: witness ? 'PermitWitnessTransferFrom' : 'PermitTransferFrom',
|
|
86
|
+
domain: _permitData.domain,
|
|
87
|
+
types: _permitData.types,
|
|
88
|
+
message: _permitData.values,
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
signature,
|
|
93
|
+
values: _permitData.values,
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -8,25 +8,25 @@ import {
|
|
|
8
8
|
} from './constants.js'
|
|
9
9
|
import { permit2Domain } from './domain.js'
|
|
10
10
|
|
|
11
|
-
export
|
|
11
|
+
export type Witness = {
|
|
12
12
|
witness: any
|
|
13
13
|
witnessTypeName: string
|
|
14
|
-
witnessType:
|
|
14
|
+
witnessType: Record<string, { name: string; type: string }[]>
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export
|
|
17
|
+
export type TokenPermissions = {
|
|
18
18
|
token: Address
|
|
19
19
|
amount: bigint
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export
|
|
22
|
+
export type PermitTransferFrom = {
|
|
23
23
|
permitted: TokenPermissions
|
|
24
24
|
spender: Address
|
|
25
25
|
nonce: bigint
|
|
26
26
|
deadline: bigint
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
export
|
|
29
|
+
export type PermitBatchTransferFrom = {
|
|
30
30
|
permitted: TokenPermissions[]
|
|
31
31
|
spender: Address
|
|
32
32
|
nonce: bigint
|
|
@@ -154,6 +154,18 @@ export function getPermitBatchTransferData(
|
|
|
154
154
|
|
|
155
155
|
// return the data to be sent in a eth_signTypedData RPC call
|
|
156
156
|
// for signing the given permit data
|
|
157
|
+
export function getPermitData<T extends PermitTransferFrom>(
|
|
158
|
+
permit: T,
|
|
159
|
+
permit2Address: Address,
|
|
160
|
+
chainId: number,
|
|
161
|
+
witness?: Witness
|
|
162
|
+
): PermitTransferFromData
|
|
163
|
+
export function getPermitData<T extends PermitBatchTransferFrom>(
|
|
164
|
+
permit: T,
|
|
165
|
+
permit2Address: Address,
|
|
166
|
+
chainId: number,
|
|
167
|
+
witness?: Witness
|
|
168
|
+
): PermitBatchTransferFromData
|
|
157
169
|
export function getPermitData(
|
|
158
170
|
permit: PermitTransferFrom | PermitBatchTransferFrom,
|
|
159
171
|
permit2Address: Address,
|
|
@@ -166,8 +178,8 @@ export function getPermitData(
|
|
|
166
178
|
return getPermitBatchTransferData(permit, permit2Address, chainId, witness)
|
|
167
179
|
}
|
|
168
180
|
|
|
169
|
-
export function hash(
|
|
170
|
-
permit:
|
|
181
|
+
export function hash<T extends PermitTransferFrom | PermitBatchTransferFrom>(
|
|
182
|
+
permit: T,
|
|
171
183
|
permit2Address: Address,
|
|
172
184
|
chainId: number,
|
|
173
185
|
witness?: Witness
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Address, Hash, TypedData, TypedDataDomain } from 'viem'
|
|
2
|
+
import type {
|
|
3
|
+
PermitBatchTransferFrom,
|
|
4
|
+
PermitTransferFrom,
|
|
5
|
+
} from './signatureTransfer.js'
|
|
6
|
+
|
|
7
|
+
export type PermitSignature = {
|
|
8
|
+
signature: Hash
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type NativePermitValues = {
|
|
12
|
+
owner: Address
|
|
13
|
+
spender: Address
|
|
14
|
+
nonce: bigint
|
|
15
|
+
value: bigint
|
|
16
|
+
deadline: bigint
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type NativePermitData = {
|
|
20
|
+
domain: TypedDataDomain
|
|
21
|
+
types: TypedData
|
|
22
|
+
values: NativePermitValues
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type NativePermitSignature = PermitSignature & {
|
|
26
|
+
values: NativePermitValues
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type Permit2Signature<
|
|
30
|
+
T extends PermitTransferFrom | PermitBatchTransferFrom,
|
|
31
|
+
> = PermitSignature & {
|
|
32
|
+
values: T
|
|
33
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { PermitTransferFromData } from './signatureTransfer.js'
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
PermitData,
|
|
5
|
+
PermitValues,
|
|
6
|
+
PermitWitnessTransferFromValues,
|
|
7
|
+
} from '@lifi/types'
|
|
8
|
+
import type {} from './signatureTransfer.js'
|
|
9
|
+
import type { NativePermitData } from './types.js'
|
|
10
|
+
|
|
11
|
+
export const prettifyPermit2Data = (
|
|
12
|
+
permitData: PermitData<PermitWitnessTransferFromValues<string>>
|
|
13
|
+
): PermitTransferFromData => {
|
|
14
|
+
return {
|
|
15
|
+
...permitData,
|
|
16
|
+
values: {
|
|
17
|
+
...permitData.values,
|
|
18
|
+
permitted: {
|
|
19
|
+
...permitData.values.permitted,
|
|
20
|
+
amount: BigInt(permitData.values.permitted.amount),
|
|
21
|
+
},
|
|
22
|
+
nonce: BigInt(permitData.values.nonce),
|
|
23
|
+
deadline: BigInt(permitData.values.deadline),
|
|
24
|
+
},
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const prettifyNativePermitData = (
|
|
29
|
+
permitData: PermitData<PermitValues<string>>
|
|
30
|
+
): NativePermitData => {
|
|
31
|
+
return {
|
|
32
|
+
...permitData,
|
|
33
|
+
values: {
|
|
34
|
+
...permitData.values,
|
|
35
|
+
value: BigInt(permitData.values.value),
|
|
36
|
+
nonce: BigInt(permitData.values.nonce),
|
|
37
|
+
deadline: BigInt(permitData.values.deadline),
|
|
38
|
+
},
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { ChainId } from '@lifi/types'
|
|
1
|
+
import { ChainId, ChainType } from '@lifi/types'
|
|
2
2
|
import type { Client } from 'viem'
|
|
3
3
|
import { http, createClient, fallback, webSocket } from 'viem'
|
|
4
4
|
import { type Chain, mainnet } from 'viem/chains'
|
|
5
5
|
import { config } from '../../config.js'
|
|
6
6
|
import { getRpcUrls } from '../rpc.js'
|
|
7
|
+
import type { EVMProvider } from './types.js'
|
|
7
8
|
|
|
8
9
|
// cached providers
|
|
9
10
|
const publicClients: Record<number, Client> = {}
|
|
@@ -14,46 +15,48 @@ const publicClients: Record<number, Client> = {}
|
|
|
14
15
|
* @returns The public client for the given chain
|
|
15
16
|
*/
|
|
16
17
|
export const getPublicClient = async (chainId: number): Promise<Client> => {
|
|
17
|
-
if (
|
|
18
|
-
|
|
19
|
-
const fallbackTransports = urls.map((url) =>
|
|
20
|
-
url.startsWith('wss')
|
|
21
|
-
? webSocket(url)
|
|
22
|
-
: http(url, {
|
|
23
|
-
batch: {
|
|
24
|
-
batchSize: 64,
|
|
25
|
-
},
|
|
26
|
-
})
|
|
27
|
-
)
|
|
28
|
-
const _chain = await config.getChainById(chainId)
|
|
29
|
-
const chain: Chain = {
|
|
30
|
-
..._chain,
|
|
31
|
-
..._chain.metamask,
|
|
32
|
-
name: _chain.metamask.chainName,
|
|
33
|
-
rpcUrls: {
|
|
34
|
-
default: { http: _chain.metamask.rpcUrls },
|
|
35
|
-
public: { http: _chain.metamask.rpcUrls },
|
|
36
|
-
},
|
|
37
|
-
}
|
|
38
|
-
// Add ENS contracts
|
|
39
|
-
if (chain.id === ChainId.ETH) {
|
|
40
|
-
chain.contracts = {
|
|
41
|
-
...mainnet.contracts,
|
|
42
|
-
...chain.contracts,
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
publicClients[chainId] = createClient({
|
|
46
|
-
chain: chain,
|
|
47
|
-
transport: fallback(fallbackTransports),
|
|
48
|
-
batch: {
|
|
49
|
-
multicall: true,
|
|
50
|
-
},
|
|
51
|
-
})
|
|
18
|
+
if (publicClients[chainId]) {
|
|
19
|
+
return publicClients[chainId]
|
|
52
20
|
}
|
|
53
21
|
|
|
54
|
-
|
|
55
|
-
|
|
22
|
+
const urls = await getRpcUrls(chainId)
|
|
23
|
+
const fallbackTransports = urls.map((url) =>
|
|
24
|
+
url.startsWith('wss')
|
|
25
|
+
? webSocket(url)
|
|
26
|
+
: http(url, {
|
|
27
|
+
batch: {
|
|
28
|
+
batchSize: 64,
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
)
|
|
32
|
+
const _chain = await config.getChainById(chainId)
|
|
33
|
+
const chain: Chain = {
|
|
34
|
+
..._chain,
|
|
35
|
+
..._chain.metamask,
|
|
36
|
+
name: _chain.metamask.chainName,
|
|
37
|
+
rpcUrls: {
|
|
38
|
+
default: { http: _chain.metamask.rpcUrls },
|
|
39
|
+
public: { http: _chain.metamask.rpcUrls },
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
// Add ENS contracts
|
|
43
|
+
if (chain.id === ChainId.ETH) {
|
|
44
|
+
chain.contracts = {
|
|
45
|
+
...mainnet.contracts,
|
|
46
|
+
...chain.contracts,
|
|
47
|
+
}
|
|
56
48
|
}
|
|
49
|
+
const provider = config.getProvider(ChainType.EVM) as EVMProvider | undefined
|
|
50
|
+
publicClients[chainId] = createClient({
|
|
51
|
+
chain: chain,
|
|
52
|
+
transport: fallback(
|
|
53
|
+
fallbackTransports,
|
|
54
|
+
provider?.options?.fallbackTransportConfig
|
|
55
|
+
),
|
|
56
|
+
batch: {
|
|
57
|
+
multicall: true,
|
|
58
|
+
},
|
|
59
|
+
})
|
|
57
60
|
|
|
58
61
|
return publicClients[chainId]
|
|
59
62
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import type { LiFiStep } from '@lifi/types'
|
|
1
2
|
import type { LiFiStepExtended } from '../types.js'
|
|
2
3
|
import type { EVMPermitStep } from './types.js'
|
|
3
4
|
|
|
4
|
-
export function isRelayerStep(
|
|
5
|
+
export function isRelayerStep(
|
|
6
|
+
step: LiFiStepExtended | LiFiStep
|
|
7
|
+
): step is EVMPermitStep {
|
|
5
8
|
const evmStep = step as EVMPermitStep
|
|
6
|
-
return '
|
|
9
|
+
return 'permits' in evmStep && evmStep.permits?.length > 0
|
|
7
10
|
}
|
package/src/core/EVM/types.ts
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
import { type BaseToken, ChainType } from '@lifi/types'
|
|
2
|
-
import type { Client } from 'viem'
|
|
1
|
+
import { type BaseToken, ChainType, type Permit } from '@lifi/types'
|
|
2
|
+
import type { Address, Client, FallbackTransportConfig, Hex } from 'viem'
|
|
3
3
|
import type { LiFiStepExtended, SwitchChainHook } from '../types.js'
|
|
4
4
|
import type { SDKProvider } from '../types.js'
|
|
5
|
-
import type { PermitData } from './permit2/domain.js'
|
|
6
|
-
import type {
|
|
7
|
-
PermitTransferFrom,
|
|
8
|
-
Witness,
|
|
9
|
-
} from './permit2/signatureTransfer.js'
|
|
10
5
|
|
|
11
6
|
export interface EVMProviderOptions {
|
|
12
7
|
getWalletClient?: () => Promise<Client>
|
|
13
8
|
switchChain?: SwitchChainHook
|
|
9
|
+
fallbackTransportConfig?: FallbackTransportConfig
|
|
14
10
|
}
|
|
15
11
|
|
|
16
12
|
export interface EVMProvider extends SDKProvider {
|
|
13
|
+
options: EVMProviderOptions
|
|
17
14
|
setOptions(options: EVMProviderOptions): void
|
|
15
|
+
getWalletClient?(): Promise<Client>
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
export function isEVM(provider: SDKProvider): provider is EVMProvider {
|
|
@@ -55,7 +53,14 @@ export interface RevokeApprovalRequest {
|
|
|
55
53
|
}
|
|
56
54
|
|
|
57
55
|
export interface EVMPermitStep extends LiFiStepExtended {
|
|
58
|
-
|
|
59
|
-
permitData: PermitData
|
|
60
|
-
witness: Witness
|
|
56
|
+
permits: Permit[]
|
|
61
57
|
}
|
|
58
|
+
|
|
59
|
+
export type Call = {
|
|
60
|
+
to: Address
|
|
61
|
+
data?: Hex
|
|
62
|
+
value?: bigint
|
|
63
|
+
chainId?: number
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type TransactionMethodType = 'standard' | 'relayed' | 'batched'
|
|
@@ -28,11 +28,16 @@ export const waitForBatchTransactionReceipt = async (
|
|
|
28
28
|
id: batchHash,
|
|
29
29
|
})
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
// EIP-5792 specs was updated to return 100 for pending transactions https://eips.ethereum.org/EIPS/eip-5792
|
|
32
|
+
if (
|
|
33
|
+
callsDetails.status === 'PENDING' ||
|
|
34
|
+
callsDetails.status === (100 as any)
|
|
35
|
+
) {
|
|
32
36
|
return undefined
|
|
33
37
|
}
|
|
34
38
|
|
|
35
|
-
|
|
39
|
+
// EIP-5792 specs was updated to return 200 for confirmed transactions https://eips.ethereum.org/EIPS/eip-5792
|
|
40
|
+
if (callsDetails.status === 'CONFIRMED' || callsDetails.status === 200) {
|
|
36
41
|
if (
|
|
37
42
|
!callsDetails.receipts?.length ||
|
|
38
43
|
!callsDetails.receipts.every((receipt) => receipt.transactionHash) ||
|