@velora-dex/widget 0.0.12 → 0.0.14
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/dist/components/ui/drawer.d.ts +1 -1
- package/dist/components/ui/drawer.d.ts.map +1 -1
- package/dist/components/ui/drawer.js +1 -1
- package/dist/components/ui/drawer.js.map +1 -1
- package/dist/components/ui/dropdown-menu.js +25 -19
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/vaul/browser.d.ts +8 -0
- package/dist/components/ui/vaul/browser.d.ts.map +1 -0
- package/dist/components/ui/vaul/browser.js +37 -0
- package/dist/components/ui/vaul/browser.js.map +1 -0
- package/dist/components/ui/vaul/constants.d.ts +12 -0
- package/dist/components/ui/vaul/constants.d.ts.map +1 -0
- package/dist/components/ui/vaul/constants.js +24 -0
- package/dist/components/ui/vaul/constants.js.map +1 -0
- package/dist/components/ui/vaul/context.d.ts +38 -0
- package/dist/components/ui/vaul/context.d.ts.map +1 -0
- package/dist/components/ui/vaul/context.js +72 -0
- package/dist/components/ui/vaul/context.js.map +1 -0
- package/dist/components/ui/vaul/helpers.d.ts +17 -0
- package/dist/components/ui/vaul/helpers.d.ts.map +1 -0
- package/dist/components/ui/vaul/helpers.js +87 -0
- package/dist/components/ui/vaul/helpers.js.map +1 -0
- package/dist/components/ui/vaul/index.d.ts +140 -0
- package/dist/components/ui/vaul/index.d.ts.map +1 -0
- package/dist/components/ui/vaul/index.js +807 -0
- package/dist/components/ui/vaul/index.js.map +1 -0
- package/dist/components/ui/vaul/types.d.ts +7 -0
- package/dist/components/ui/vaul/types.d.ts.map +1 -0
- package/dist/components/ui/vaul/use-composed-refs.d.ts +14 -0
- package/dist/components/ui/vaul/use-composed-refs.d.ts.map +1 -0
- package/dist/components/ui/vaul/use-composed-refs.js +28 -0
- package/dist/components/ui/vaul/use-composed-refs.js.map +1 -0
- package/dist/components/ui/vaul/use-controllable-state.d.ts +9 -0
- package/dist/components/ui/vaul/use-controllable-state.d.ts.map +1 -0
- package/dist/components/ui/vaul/use-controllable-state.js +134 -0
- package/dist/components/ui/vaul/use-controllable-state.js.map +1 -0
- package/dist/components/ui/vaul/use-position-fixed.d.ts +19 -0
- package/dist/components/ui/vaul/use-position-fixed.d.ts.map +1 -0
- package/dist/components/ui/vaul/use-position-fixed.js +109 -0
- package/dist/components/ui/vaul/use-position-fixed.js.map +1 -0
- package/dist/components/ui/vaul/use-prevent-scroll.d.ts +18 -0
- package/dist/components/ui/vaul/use-prevent-scroll.d.ts.map +1 -0
- package/dist/components/ui/vaul/use-prevent-scroll.js +182 -0
- package/dist/components/ui/vaul/use-prevent-scroll.js.map +1 -0
- package/dist/components/ui/vaul/use-scale-background.d.ts +2 -0
- package/dist/components/ui/vaul/use-scale-background.d.ts.map +1 -0
- package/dist/components/ui/vaul/use-scale-background.js +68 -0
- package/dist/components/ui/vaul/use-scale-background.js.map +1 -0
- package/dist/components/ui/vaul/use-snap-points.d.ts +32 -0
- package/dist/components/ui/vaul/use-snap-points.d.ts.map +1 -0
- package/dist/components/ui/vaul/use-snap-points.js +222 -0
- package/dist/components/ui/vaul/use-snap-points.js.map +1 -0
- package/dist/components/web3/AccountButton.d.ts.map +1 -1
- package/dist/components/web3/AccountButton.js +26 -30
- package/dist/components/web3/AccountButton.js.map +1 -1
- package/dist/components/web3/ConnectWallets/index.d.ts.map +1 -1
- package/dist/components/web3/ConnectWallets/index.js +12 -64
- package/dist/components/web3/ConnectWallets/index.js.map +1 -1
- package/dist/components/widget/AppHeader/ActivityButton.d.ts +2 -0
- package/dist/components/widget/AppHeader/ActivityButton.d.ts.map +1 -0
- package/dist/components/widget/AppHeader/ActivityButton.js +46 -0
- package/dist/components/widget/AppHeader/ActivityButton.js.map +1 -0
- package/dist/components/widget/AppHeader/AppHeader.d.ts.map +1 -1
- package/dist/components/widget/AppHeader/AppHeader.js +35 -29
- package/dist/components/widget/AppHeader/AppHeader.js.map +1 -1
- package/dist/components/widget/Drawer/index.d.ts +1 -1
- package/dist/components/widget/Drawer/index.d.ts.map +1 -1
- package/dist/components/widget/Drawer/index.js +37 -30
- package/dist/components/widget/Drawer/index.js.map +1 -1
- package/dist/components/widget/Informative/Informative.d.ts +7 -0
- package/dist/components/widget/Informative/Informative.d.ts.map +1 -0
- package/dist/components/widget/Informative/Informative.js +33 -0
- package/dist/components/widget/Informative/Informative.js.map +1 -0
- package/dist/components/widget/PoweredBy/PoweredBy.d.ts +2 -0
- package/dist/components/widget/PoweredBy/PoweredBy.d.ts.map +1 -0
- package/dist/components/widget/PoweredBy/PoweredBy.js +31 -0
- package/dist/components/widget/PoweredBy/PoweredBy.js.map +1 -0
- package/dist/components/widget/PoweredBy/assets/velora.svg.js +12 -0
- package/dist/components/widget/PoweredBy/assets/velora.svg.js.map +1 -0
- package/dist/components/widget/ReceiverAddress/ReceiverAddress.js +35 -39
- package/dist/components/widget/ReceiverAddress/ReceiverAddress.js.map +1 -1
- package/dist/components/widget/ReceiverAddress/state/receiverAddressAtom.js +1 -1
- package/dist/components/widget/SelectToken/SelectTokenButton.js +55 -65
- package/dist/components/widget/SelectToken/SelectTokenButton.js.map +1 -1
- package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.d.ts.map +1 -1
- package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js +1 -0
- package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js.map +1 -1
- package/dist/components/widget/TokenInput/index.d.ts.map +1 -1
- package/dist/components/widget/TokenInput/index.js +133 -103
- package/dist/components/widget/TokenInput/index.js.map +1 -1
- package/dist/components/widget/TokenInput/types.d.ts +4 -2
- package/dist/components/widget/TokenInput/types.d.ts.map +1 -1
- package/dist/components/widget/TradeOverview/Stepper.d.ts.map +1 -1
- package/dist/components/widget/TradeOverview/Stepper.js +38 -3
- package/dist/components/widget/TradeOverview/Stepper.js.map +1 -1
- package/dist/components/widget/WrapEth/WrapEthDrawerButton.d.ts +2 -1
- package/dist/components/widget/WrapEth/WrapEthDrawerButton.d.ts.map +1 -1
- package/dist/components/widget/WrapEth/WrapEthDrawerButton.js +30 -29
- package/dist/components/widget/WrapEth/WrapEthDrawerButton.js.map +1 -1
- package/dist/hooks/gas/config.d.ts +6 -0
- package/dist/hooks/gas/config.d.ts.map +1 -0
- package/dist/hooks/gas/config.js +53 -0
- package/dist/hooks/gas/config.js.map +1 -0
- package/dist/hooks/gas/types.d.ts +43 -0
- package/dist/hooks/gas/types.d.ts.map +1 -0
- package/dist/hooks/gas/useGasPrices.d.ts +7 -0
- package/dist/hooks/gas/useGasPrices.d.ts.map +1 -0
- package/dist/hooks/gas/useGasPrices.js +118 -0
- package/dist/hooks/gas/useGasPrices.js.map +1 -0
- package/dist/hooks/gas/utils.d.ts +8 -0
- package/dist/hooks/gas/utils.d.ts.map +1 -0
- package/dist/hooks/gas/utils.js +21 -0
- package/dist/hooks/gas/utils.js.map +1 -0
- package/dist/hooks/getCode/useIsAccountContract.d.ts +2 -0
- package/dist/hooks/getCode/useIsAccountContract.d.ts.map +1 -0
- package/dist/hooks/getCode/useIsAccountContract.js +34 -0
- package/dist/hooks/getCode/useIsAccountContract.js.map +1 -0
- package/dist/hooks/permit/hooks/useGetPermitInfo.d.ts +27 -0
- package/dist/hooks/permit/hooks/useGetPermitInfo.d.ts.map +1 -0
- package/dist/hooks/permit/hooks/useGetPermitInfo.js +98 -0
- package/dist/hooks/permit/hooks/useGetPermitInfo.js.map +1 -0
- package/dist/hooks/permit/hooks/useGetSafePermitInfo.d.ts +31 -0
- package/dist/hooks/permit/hooks/useGetSafePermitInfo.d.ts.map +1 -0
- package/dist/hooks/permit/hooks/useGetSafePermitInfo.js +129 -0
- package/dist/hooks/permit/hooks/useGetSafePermitInfo.js.map +1 -0
- package/dist/hooks/permit/hooks/usePermit1Nonce.d.ts +38 -0
- package/dist/hooks/permit/hooks/usePermit1Nonce.d.ts.map +1 -0
- package/dist/hooks/permit/hooks/usePermit1Nonce.js +153 -0
- package/dist/hooks/permit/hooks/usePermit1Nonce.js.map +1 -0
- package/dist/hooks/permit/hooks/useSignArbitraryTypedData.d.ts +18 -0
- package/dist/hooks/permit/hooks/useSignArbitraryTypedData.d.ts.map +1 -0
- package/dist/hooks/permit/hooks/useSignArbitraryTypedData.js +109 -0
- package/dist/hooks/permit/hooks/useSignArbitraryTypedData.js.map +1 -0
- package/dist/hooks/permit/hooks/useSignPermit.d.ts +13 -0
- package/dist/hooks/permit/hooks/useSignPermit.d.ts.map +1 -0
- package/dist/hooks/permit/hooks/useSignPermit.js +103 -0
- package/dist/hooks/permit/hooks/useSignPermit.js.map +1 -0
- package/dist/hooks/permit/hooks/useSignTokenFromPermit1.d.ts +50 -0
- package/dist/hooks/permit/hooks/useSignTokenFromPermit1.d.ts.map +1 -0
- package/dist/hooks/permit/hooks/useSignTokenFromPermit1.js +338 -0
- package/dist/hooks/permit/hooks/useSignTokenFromPermit1.js.map +1 -0
- package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.d.ts +10 -0
- package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.d.ts.map +1 -0
- package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.js +69 -0
- package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.js.map +1 -0
- package/dist/hooks/permit/hooks/useTokenFromPermitInfo.d.ts +10 -0
- package/dist/hooks/permit/hooks/useTokenFromPermitInfo.d.ts.map +1 -0
- package/dist/hooks/permit/hooks/useTokenFromPermitInfo.js +63 -0
- package/dist/hooks/permit/hooks/useTokenFromPermitInfo.js.map +1 -0
- package/dist/hooks/permit/hooks/useTryToSignPermit1.d.ts +16 -0
- package/dist/hooks/permit/hooks/useTryToSignPermit1.d.ts.map +1 -0
- package/dist/hooks/permit/hooks/useTryToSignPermit1.js +94 -0
- package/dist/hooks/permit/hooks/useTryToSignPermit1.js.map +1 -0
- package/dist/hooks/permit/utils/abi.d.ts +219 -0
- package/dist/hooks/permit/utils/abi.d.ts.map +1 -0
- package/dist/hooks/permit/utils/abi.js +204 -0
- package/dist/hooks/permit/utils/abi.js.map +1 -0
- package/dist/hooks/permit/utils/constants.d.ts +224 -0
- package/dist/hooks/permit/utils/constants.d.ts.map +1 -0
- package/dist/hooks/permit/utils/constants.js +229 -0
- package/dist/hooks/permit/utils/constants.js.map +1 -0
- package/dist/hooks/permit/utils/construct.d.ts +161 -0
- package/dist/hooks/permit/utils/construct.d.ts.map +1 -0
- package/dist/hooks/permit/utils/construct.js +227 -0
- package/dist/hooks/permit/utils/construct.js.map +1 -0
- package/dist/hooks/permit/utils/detect.d.ts +35 -0
- package/dist/hooks/permit/utils/detect.d.ts.map +1 -0
- package/dist/hooks/permit/utils/detect.js +241 -0
- package/dist/hooks/permit/utils/detect.js.map +1 -0
- package/dist/hooks/permit/utils/domainSeparator.d.ts +44 -0
- package/dist/hooks/permit/utils/domainSeparator.d.ts.map +1 -0
- package/dist/hooks/permit/utils/domainSeparator.js +216 -0
- package/dist/hooks/permit/utils/domainSeparator.js.map +1 -0
- package/dist/hooks/permit/utils/encodeArgs.d.ts +11 -0
- package/dist/hooks/permit/utils/encodeArgs.d.ts.map +1 -0
- package/dist/hooks/permit/utils/encodeArgs.js +29 -0
- package/dist/hooks/permit/utils/encodeArgs.js.map +1 -0
- package/dist/hooks/permit/utils/trySignPermit1.d.ts +42 -0
- package/dist/hooks/permit/utils/trySignPermit1.d.ts.map +1 -0
- package/dist/hooks/permit/utils/trySignPermit1.js +283 -0
- package/dist/hooks/permit/utils/trySignPermit1.js.map +1 -0
- package/dist/hooks/permit/utils/types.d.ts +77 -0
- package/dist/hooks/permit/utils/types.d.ts.map +1 -0
- package/dist/hooks/permit/utils/utils.d.ts +15 -0
- package/dist/hooks/permit/utils/utils.d.ts.map +1 -0
- package/dist/hooks/permit/utils/utils.js +44 -0
- package/dist/hooks/permit/utils/utils.js.map +1 -0
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js +1 -1
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.d.ts +1 -1
- package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js +94 -0
- package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js.map +1 -0
- package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js +1 -1
- package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js.map +1 -1
- package/dist/hooks/swap/prices/useSwapPrices.d.ts +3 -0
- package/dist/hooks/swap/prices/useSwapPrices.d.ts.map +1 -1
- package/dist/hooks/swap/prices/useSwapPrices.js +43 -29
- package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
- package/dist/hooks/swap/prices/useTokenInputsFromPrice.d.ts +2 -10
- package/dist/hooks/swap/prices/useTokenInputsFromPrice.d.ts.map +1 -1
- package/dist/hooks/swap/prices/useTokenInputsFromPrice.js +10 -10
- package/dist/hooks/swap/prices/useTokenInputsFromPrice.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/types.d.ts +15 -0
- package/dist/hooks/swap/tradeFlow/common/types.d.ts.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts +2 -1
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.js +433 -268
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.d.ts.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js +4 -1
- package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketFlow.d.ts +2 -1
- package/dist/hooks/swap/tradeFlow/useMarketFlow.d.ts.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketFlow.js +411 -245
- package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketSwapStep.d.ts.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js +4 -1
- package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js.map +1 -1
- package/dist/hooks/tokens/allowance/types.d.ts +2 -0
- package/dist/hooks/tokens/allowance/types.d.ts.map +1 -1
- package/dist/hooks/tokens/allowance/useGenericTokenAllowance.d.ts +3 -1
- package/dist/hooks/tokens/allowance/useGenericTokenAllowance.d.ts.map +1 -1
- package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js +4 -2
- package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js.map +1 -1
- package/dist/hooks/tokens/allowance/useTokenAllowance.d.ts +1 -1
- package/dist/hooks/tokens/allowance/useTokenAllowance.d.ts.map +1 -1
- package/dist/hooks/tokens/allowance/useTokenAllowance.js +11 -8
- package/dist/hooks/tokens/allowance/useTokenAllowance.js.map +1 -1
- package/dist/hooks/tokens/balances/useInvalidateTokenData.d.ts +1 -0
- package/dist/hooks/tokens/balances/useInvalidateTokenData.d.ts.map +1 -1
- package/dist/hooks/tokens/balances/useInvalidateTokenData.js +32 -5
- package/dist/hooks/tokens/balances/useInvalidateTokenData.js.map +1 -1
- package/dist/hooks/txs/mutations/useSendTx.d.ts.map +1 -1
- package/dist/hooks/txs/mutations/useSendTx.js +48 -44
- package/dist/hooks/txs/mutations/useSendTx.js.map +1 -1
- package/dist/hooks/useIsCrosschainPossible.d.ts +12 -0
- package/dist/hooks/useIsCrosschainPossible.d.ts.map +1 -0
- package/dist/hooks/useIsCrosschainPossible.js +68 -0
- package/dist/hooks/useIsCrosschainPossible.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/utils/delta.d.ts +13 -0
- package/dist/lib/utils/delta.d.ts.map +1 -0
- package/dist/lib/utils/delta.js +35 -0
- package/dist/lib/utils/delta.js.map +1 -0
- package/dist/lib/utils/explorer.d.ts +2 -0
- package/dist/lib/utils/explorer.d.ts.map +1 -1
- package/dist/lib/utils/explorer.js +15 -1
- package/dist/lib/utils/explorer.js.map +1 -1
- package/dist/styles/global.css.js +4 -0
- package/dist/styles/global.css.js.map +1 -0
- package/dist/styles.css +194 -3411
- package/dist/test/Configurator.d.ts.map +1 -1
- package/dist/tokens/defaultTokens.js.map +1 -1
- package/dist/widget/Updaters.d.ts.map +1 -1
- package/dist/widget/Updaters.js +4 -0
- package/dist/widget/Updaters.js.map +1 -1
- package/dist/widget/button/hooks/useWidgetButtonExtraProps.d.ts +9 -0
- package/dist/widget/button/hooks/useWidgetButtonExtraProps.d.ts.map +1 -0
- package/dist/widget/button/hooks/useWidgetButtonExtraProps.js +81 -0
- package/dist/widget/button/hooks/useWidgetButtonExtraProps.js.map +1 -0
- package/dist/widget/index.d.ts.map +1 -1
- package/dist/widget/index.js +303 -259
- package/dist/widget/index.js.map +1 -1
- package/dist/widget/inputs/hooks/types.d.ts +4 -0
- package/dist/widget/inputs/hooks/types.d.ts.map +1 -0
- package/dist/widget/inputs/hooks/useTokenFromInputProps.d.ts +3 -1
- package/dist/widget/inputs/hooks/useTokenFromInputProps.d.ts.map +1 -1
- package/dist/widget/inputs/hooks/useTokenFromInputProps.js +160 -99
- package/dist/widget/inputs/hooks/useTokenFromInputProps.js.map +1 -1
- package/dist/widget/inputs/hooks/useTokenToInputProps.d.ts +2 -1
- package/dist/widget/inputs/hooks/useTokenToInputProps.d.ts.map +1 -1
- package/dist/widget/inputs/hooks/useTokenToInputProps.js +136 -105
- package/dist/widget/inputs/hooks/useTokenToInputProps.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { isAddress } from 'viem';
|
|
2
|
+
import { readContracts, getBytecode } from '@wagmi/core';
|
|
3
|
+
import { EIP_2612_PERMIT_ABI, UPGRADABLE_ERC_20_ABI } from './abi.js';
|
|
4
|
+
import { DOMAIN_TYPEHASH_ABI, PERMIT_TYPEHASH_ABI, VERSIONS_ABI, EIP712_DOMAIN_ABI, DOMAIN_ABIS, EIP2612_PERMIT_TYPEHASH, DAI_LIKE_PERMIT_TYPEHASH, DOMAIN_HASHES_WITHOUT_VERSION } from './constants.js';
|
|
5
|
+
import { getDomainFromEIP712Domain } from './utils.js';
|
|
6
|
+
import { isETHaddress } from '../../../tokens/utils/eth.js';
|
|
7
|
+
import { guessDomainParams } from './domainSeparator.js';
|
|
8
|
+
|
|
9
|
+
globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || {
|
|
10
|
+
cache: /* @__PURE__ */ new Map(),
|
|
11
|
+
get(name, inst) {
|
|
12
|
+
if (this.cache.has(name)) {
|
|
13
|
+
return this.cache.get(name);
|
|
14
|
+
}
|
|
15
|
+
this.cache.set(name, inst);
|
|
16
|
+
return inst;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const NotDetectedResult = {
|
|
20
|
+
type: "NOT_DETECTED",
|
|
21
|
+
domain: null
|
|
22
|
+
};
|
|
23
|
+
const EIP_2612_PERMIT_SELECTOR = "0xd505accf";
|
|
24
|
+
const DAI_PERMIT_SELECTOR = "0x8fcbaf0c";
|
|
25
|
+
async function detectPermitSupportType({
|
|
26
|
+
config,
|
|
27
|
+
tokenAddress,
|
|
28
|
+
chainId
|
|
29
|
+
}) {
|
|
30
|
+
if (isETHaddress(tokenAddress)) {
|
|
31
|
+
return NotDetectedResult;
|
|
32
|
+
}
|
|
33
|
+
const domainResults = await readContracts(config, {
|
|
34
|
+
allowFailure: true,
|
|
35
|
+
contracts: [{
|
|
36
|
+
chainId,
|
|
37
|
+
abi: EIP_2612_PERMIT_ABI,
|
|
38
|
+
functionName: "DOMAIN_SEPARATOR",
|
|
39
|
+
// @TODO maybe not needed
|
|
40
|
+
address: tokenAddress,
|
|
41
|
+
args: []
|
|
42
|
+
}, {
|
|
43
|
+
chainId,
|
|
44
|
+
abi: DOMAIN_TYPEHASH_ABI,
|
|
45
|
+
functionName: "DOMAIN_TYPEHASH",
|
|
46
|
+
address: tokenAddress,
|
|
47
|
+
args: []
|
|
48
|
+
}, {
|
|
49
|
+
chainId,
|
|
50
|
+
abi: PERMIT_TYPEHASH_ABI,
|
|
51
|
+
functionName: "PERMIT_TYPEHASH",
|
|
52
|
+
address: tokenAddress,
|
|
53
|
+
args: []
|
|
54
|
+
}, {
|
|
55
|
+
chainId,
|
|
56
|
+
abi: EIP_2612_PERMIT_ABI,
|
|
57
|
+
functionName: "name",
|
|
58
|
+
address: tokenAddress,
|
|
59
|
+
args: []
|
|
60
|
+
}, {
|
|
61
|
+
chainId,
|
|
62
|
+
abi: EIP_2612_PERMIT_ABI,
|
|
63
|
+
// @TODO see how version gets assigned and then deleted for UNI 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 (mainnet)
|
|
64
|
+
functionName: "version",
|
|
65
|
+
// standard
|
|
66
|
+
// @TODO chewck what a Proxy contract like 0x2791bca1f2de4661ed88a30c99a7a9449aa84174 (USDC.e on Polygon) returns,
|
|
67
|
+
// because of the fallback method it may return success with 0x instead of error
|
|
68
|
+
address: tokenAddress,
|
|
69
|
+
args: []
|
|
70
|
+
}, {
|
|
71
|
+
chainId,
|
|
72
|
+
abi: VERSIONS_ABI,
|
|
73
|
+
functionName: "EIP712_VERSION",
|
|
74
|
+
// non-standard, in USDC.e on Polygon
|
|
75
|
+
address: tokenAddress,
|
|
76
|
+
args: []
|
|
77
|
+
}, {
|
|
78
|
+
chainId,
|
|
79
|
+
abi: VERSIONS_ABI,
|
|
80
|
+
functionName: "ERC712_VERSION",
|
|
81
|
+
// non-standard
|
|
82
|
+
address: tokenAddress,
|
|
83
|
+
args: []
|
|
84
|
+
}, {
|
|
85
|
+
chainId,
|
|
86
|
+
abi: UPGRADABLE_ERC_20_ABI,
|
|
87
|
+
functionName: "implementation",
|
|
88
|
+
// sometimes implementation() is guarded by a modifier, like aEthUSDT on mainnet,
|
|
89
|
+
// then it's unreadable
|
|
90
|
+
address: tokenAddress,
|
|
91
|
+
args: []
|
|
92
|
+
}, {
|
|
93
|
+
chainId,
|
|
94
|
+
abi: EIP712_DOMAIN_ABI,
|
|
95
|
+
functionName: "eip712Domain",
|
|
96
|
+
// standard
|
|
97
|
+
address: tokenAddress,
|
|
98
|
+
args: []
|
|
99
|
+
}, {
|
|
100
|
+
chainId,
|
|
101
|
+
abi: DOMAIN_ABIS.versionAndChain,
|
|
102
|
+
functionName: "eip712Domain",
|
|
103
|
+
// non-standard, Lido stETH on mainnet
|
|
104
|
+
address: tokenAddress,
|
|
105
|
+
args: []
|
|
106
|
+
}, {
|
|
107
|
+
chainId,
|
|
108
|
+
abi: DOMAIN_ABIS.versionAndSalt,
|
|
109
|
+
functionName: "eip712Domain",
|
|
110
|
+
// non-standard
|
|
111
|
+
address: tokenAddress,
|
|
112
|
+
args: []
|
|
113
|
+
}, {
|
|
114
|
+
chainId,
|
|
115
|
+
abi: DOMAIN_ABIS.withoutVersion,
|
|
116
|
+
functionName: "eip712Domain",
|
|
117
|
+
// non-standard
|
|
118
|
+
address: tokenAddress,
|
|
119
|
+
args: []
|
|
120
|
+
}]
|
|
121
|
+
});
|
|
122
|
+
const [domainSeparator, domainTypehash, permitTypehash, name, version, versionAlt1, versionAlt2, proxyImplementation, eip712Domain, eip712DomainVersionAndChain, eip712DomainVersionAndSalt, eip712DomainWithoutVersion] = domainResults.map((r) => r.result);
|
|
123
|
+
if (!name) return NotDetectedResult;
|
|
124
|
+
let domain = null;
|
|
125
|
+
if (eip712Domain) {
|
|
126
|
+
const [fields, name2, version2, chainId2, verifyingContract, salt, extensions] = eip712Domain;
|
|
127
|
+
if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {
|
|
128
|
+
domain = getDomainFromEIP712Domain({
|
|
129
|
+
fields,
|
|
130
|
+
name: name2,
|
|
131
|
+
version: version2,
|
|
132
|
+
chainId: chainId2,
|
|
133
|
+
verifyingContract,
|
|
134
|
+
salt,
|
|
135
|
+
extensions
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (!domain && eip712DomainVersionAndChain) {
|
|
140
|
+
const [name2, version2, chainId2, verifyingContract] = eip712DomainVersionAndChain;
|
|
141
|
+
if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {
|
|
142
|
+
domain = {
|
|
143
|
+
name: name2,
|
|
144
|
+
version: version2,
|
|
145
|
+
chainId: Number(chainId2),
|
|
146
|
+
verifyingContract
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (!domain && eip712DomainVersionAndSalt) {
|
|
151
|
+
const [name2, version2, verifyingContract, salt] = eip712DomainVersionAndSalt;
|
|
152
|
+
if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {
|
|
153
|
+
domain = {
|
|
154
|
+
name: name2,
|
|
155
|
+
version: version2,
|
|
156
|
+
verifyingContract,
|
|
157
|
+
salt
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (!domain && eip712DomainWithoutVersion) {
|
|
162
|
+
const [name2, chainId2, verifyingContract] = eip712DomainWithoutVersion;
|
|
163
|
+
if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {
|
|
164
|
+
domain = {
|
|
165
|
+
name: name2,
|
|
166
|
+
chainId: Number(chainId2),
|
|
167
|
+
verifyingContract
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (domain && (eip712Domain || eip712DomainVersionAndChain || eip712DomainVersionAndSalt || eip712DomainWithoutVersion)) {
|
|
172
|
+
return {
|
|
173
|
+
type: "eip2612",
|
|
174
|
+
domain,
|
|
175
|
+
domainSeparator
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
let permitType = null;
|
|
179
|
+
if (permitTypehash) {
|
|
180
|
+
if (permitTypehash.toLowerCase() === EIP2612_PERMIT_TYPEHASH) {
|
|
181
|
+
permitType = "eip2612";
|
|
182
|
+
}
|
|
183
|
+
if (permitTypehash.toLowerCase() === DAI_LIKE_PERMIT_TYPEHASH) {
|
|
184
|
+
permitType = "dai";
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (!permitType) {
|
|
188
|
+
const contractWithMethods = proxyImplementation && isAddress(proxyImplementation) ? proxyImplementation : tokenAddress;
|
|
189
|
+
const bytecode = await getBytecode(config, {
|
|
190
|
+
address: contractWithMethods,
|
|
191
|
+
chainId
|
|
192
|
+
});
|
|
193
|
+
if (!bytecode) return NotDetectedResult;
|
|
194
|
+
if (bytecode.includes(EIP_2612_PERMIT_SELECTOR.slice(2))) {
|
|
195
|
+
permitType = "eip2612";
|
|
196
|
+
}
|
|
197
|
+
if (bytecode.includes(DAI_PERMIT_SELECTOR.slice(2))) {
|
|
198
|
+
permitType = "dai";
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (!permitType) return NotDetectedResult;
|
|
202
|
+
if (!domain) {
|
|
203
|
+
domain = {
|
|
204
|
+
name,
|
|
205
|
+
// default to 1 if not found, sometimes version is not exposed publicly
|
|
206
|
+
version: version || versionAlt1 || versionAlt2,
|
|
207
|
+
// @TODO check maybe we need to drop version
|
|
208
|
+
verifyingContract: tokenAddress,
|
|
209
|
+
chainId
|
|
210
|
+
};
|
|
211
|
+
if (domainSeparator) {
|
|
212
|
+
const guessedParams = guessDomainParams({
|
|
213
|
+
domain,
|
|
214
|
+
chainId,
|
|
215
|
+
domainSeparator
|
|
216
|
+
});
|
|
217
|
+
domain.version = guessedParams.version;
|
|
218
|
+
domain.chainId = guessedParams.chainId;
|
|
219
|
+
domain.salt = guessedParams.salt;
|
|
220
|
+
}
|
|
221
|
+
if (domainTypehash && DOMAIN_HASHES_WITHOUT_VERSION.includes(domainTypehash.toLowerCase())) {
|
|
222
|
+
delete domain.version;
|
|
223
|
+
} else if (domain.version === void 0) {
|
|
224
|
+
delete domain.version;
|
|
225
|
+
}
|
|
226
|
+
if (domain.chainId === void 0) {
|
|
227
|
+
delete domain.chainId;
|
|
228
|
+
}
|
|
229
|
+
if (domain.salt === void 0) {
|
|
230
|
+
delete domain.salt;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
type: permitType,
|
|
235
|
+
domain,
|
|
236
|
+
domainSeparator
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export { DAI_PERMIT_SELECTOR, EIP_2612_PERMIT_SELECTOR, detectPermitSupportType };
|
|
241
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sources":["../../../../src/hooks/permit/utils/detect.ts"],"sourcesContent":["import { type Address, type Hex, isAddress } from \"viem\";\nimport { type Config, readContracts, getBytecode } from \"@wagmi/core\";\nimport { EIP_2612_PERMIT_ABI, UPGRADABLE_ERC_20_ABI } from \"./abi\";\nimport {\n DOMAIN_TYPEHASH_ABI,\n DOMAIN_HASHES_WITHOUT_VERSION,\n EIP712_DOMAIN_ABI,\n PERMIT_TYPEHASH_ABI,\n VERSIONS_ABI,\n EIP2612_PERMIT_TYPEHASH,\n DAI_LIKE_PERMIT_TYPEHASH,\n DOMAIN_ABIS,\n} from \"./constants\";\nimport { getDomainFromEIP712Domain } from \"./utils\";\nimport type { MapTuple } from \"./types\";\nimport { isETHaddress } from \"@/tokens/utils/eth\";\nimport { guessDomainParams } from \"./domainSeparator\";\n\nexport type PermitType = \"eip2612\" | \"dai\";\n\nexport type PermitSupportDAI = PermitSupportResultBase & { type: \"dai\" };\nexport type PermitSupportEIP2612 = PermitSupportResultBase & {\n type: \"eip2612\";\n};\n\ntype PermitSupportResultBase = {\n type: PermitType;\n domain: {\n name: string;\n version?: string;\n chainId?: number;\n verifyingContract: Address;\n salt?: Hex; //\n };\n domainSeparator?: string;\n};\n\nexport type PermitSupportResult = PermitSupportDAI | PermitSupportEIP2612;\n\nexport type NotDetectedPermitSupport = {\n type: \"NOT_DETECTED\";\n domain: null;\n};\n\nconst NotDetectedResult: NotDetectedPermitSupport = {\n type: \"NOT_DETECTED\",\n domain: null,\n};\n\n/* const PERMIT_SIGNATURES = [\n {\n type: \"eip2612\",\n name: \"permit\",\n inputs: [\n \"address\", // owner\n \"address\", // spender\n \"uint256\", // value\n \"uint256\", // deadline\n \"uint8\", // v\n \"bytes32\", // r\n \"bytes32\", // s\n ],\n },\n {\n type: \"dai\",\n name: \"permit\",\n inputs: [\n \"address\", // owner\n \"address\", // spender\n \"uint256\", // nonce\n \"uint256\", // expiry\n \"bool\", // allowed\n \"uint8\", // v\n \"bytes32\", // r\n \"bytes32\", // s\n ],\n },\n];\n\n]; */\n\nexport const EIP_2612_PERMIT_SELECTOR = \"0xd505accf\"; // EIP2612.permit\nexport const DAI_PERMIT_SELECTOR = \"0x8fcbaf0c\"; // DAI.permit\n\nexport type DetectPermitSupportParams = {\n config: Config;\n tokenAddress: Address;\n chainId: number;\n};\n\nexport async function detectPermitSupportType({\n config,\n tokenAddress,\n chainId,\n}: DetectPermitSupportParams): Promise<\n PermitSupportResult | NotDetectedPermitSupport\n> {\n if (isETHaddress(tokenAddress)) {\n return NotDetectedResult;\n }\n\n const domainResults = await readContracts(config, {\n allowFailure: true,\n contracts: [\n {\n chainId,\n abi: EIP_2612_PERMIT_ABI,\n functionName: \"DOMAIN_SEPARATOR\", // @TODO maybe not needed\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: DOMAIN_TYPEHASH_ABI,\n functionName: \"DOMAIN_TYPEHASH\",\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: PERMIT_TYPEHASH_ABI,\n functionName: \"PERMIT_TYPEHASH\",\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: EIP_2612_PERMIT_ABI,\n functionName: \"name\",\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: EIP_2612_PERMIT_ABI,\n // @TODO see how version gets assigned and then deleted for UNI 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 (mainnet)\n functionName: \"version\", // standard\n // @TODO chewck what a Proxy contract like 0x2791bca1f2de4661ed88a30c99a7a9449aa84174 (USDC.e on Polygon) returns,\n // because of the fallback method it may return success with 0x instead of error\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: VERSIONS_ABI,\n functionName: \"EIP712_VERSION\", // non-standard, in USDC.e on Polygon\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: VERSIONS_ABI,\n functionName: \"ERC712_VERSION\", // non-standard\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: UPGRADABLE_ERC_20_ABI,\n functionName: \"implementation\",\n // sometimes implementation() is guarded by a modifier, like aEthUSDT on mainnet,\n // then it's unreadable\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: EIP712_DOMAIN_ABI,\n functionName: \"eip712Domain\", // standard\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: DOMAIN_ABIS.versionAndChain,\n functionName: \"eip712Domain\", // non-standard, Lido stETH on mainnet\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: DOMAIN_ABIS.versionAndSalt,\n functionName: \"eip712Domain\", // non-standard\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: DOMAIN_ABIS.withoutVersion,\n functionName: \"eip712Domain\", // non-standard\n address: tokenAddress,\n args: [],\n },\n ],\n });\n\n type TupleOfResutls = MapTuple<typeof domainResults, \"result\">;\n\n const [\n domainSeparator,\n domainTypehash,\n permitTypehash,\n name,\n version,\n versionAlt1,\n versionAlt2,\n proxyImplementation,\n eip712Domain,\n eip712DomainVersionAndChain,\n eip712DomainVersionAndSalt,\n eip712DomainWithoutVersion,\n ] = domainResults.map((r) => r.result) as TupleOfResutls;\n\n if (!name) return NotDetectedResult;\n\n let domain: PermitSupportResult[\"domain\"] | null = null;\n\n if (eip712Domain) {\n const [\n fields,\n name,\n version,\n chainId,\n verifyingContract,\n salt,\n extensions,\n ] = eip712Domain;\n\n // if Token is a Proxy, then depending on the fallback method implementation,\n // the result may return partial eip712Domain that actually comes from an alternative eip712Domain impelmentation,\n // but in that case only the first fields that are the same between all implementations will be correct,\n // no verifyingContract\n if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {\n domain = getDomainFromEIP712Domain({\n fields,\n name,\n version,\n chainId,\n verifyingContract,\n salt,\n extensions,\n });\n }\n }\n if (!domain && eip712DomainVersionAndChain) {\n const [name, version, chainId, verifyingContract] =\n eip712DomainVersionAndChain;\n\n if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {\n domain = {\n name,\n version,\n chainId: Number(chainId),\n verifyingContract,\n };\n }\n }\n if (!domain && eip712DomainVersionAndSalt) {\n const [name, version, verifyingContract, salt] = eip712DomainVersionAndSalt;\n\n if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {\n domain = {\n name,\n version,\n verifyingContract,\n salt,\n };\n }\n }\n if (!domain && eip712DomainWithoutVersion) {\n const [name, chainId, verifyingContract] = eip712DomainWithoutVersion;\n\n if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {\n domain = {\n name,\n chainId: Number(chainId),\n verifyingContract,\n };\n }\n }\n\n if (\n domain &&\n (eip712Domain ||\n eip712DomainVersionAndChain ||\n eip712DomainVersionAndSalt ||\n eip712DomainWithoutVersion)\n ) {\n // eip712Domain is for EIP2612 Permit\n return {\n type: \"eip2612\",\n domain,\n domainSeparator,\n };\n }\n\n let permitType: PermitType | null = null;\n\n if (permitTypehash) {\n if (permitTypehash.toLowerCase() === EIP2612_PERMIT_TYPEHASH) {\n permitType = \"eip2612\";\n }\n\n if (permitTypehash.toLowerCase() === DAI_LIKE_PERMIT_TYPEHASH) {\n permitType = \"dai\";\n }\n }\n\n if (!permitType) {\n const contractWithMethods =\n proxyImplementation && isAddress(proxyImplementation)\n ? proxyImplementation\n : tokenAddress;\n\n const bytecode = await getBytecode(config, {\n address: contractWithMethods,\n chainId,\n });\n if (!bytecode) return NotDetectedResult;\n\n // see if permit() method with expected signature is available,\n // but this check will not catch Proxy Contracts\n if (bytecode.includes(EIP_2612_PERMIT_SELECTOR.slice(2))) {\n permitType = \"eip2612\";\n }\n\n if (bytecode.includes(DAI_PERMIT_SELECTOR.slice(2))) {\n permitType = \"dai\";\n }\n }\n\n if (!permitType) return NotDetectedResult;\n\n if (!domain) {\n domain = {\n name,\n // default to 1 if not found, sometimes version is not exposed publicly\n version: version || versionAlt1 || versionAlt2, // @TODO check maybe we need to drop version\n verifyingContract: tokenAddress,\n chainId,\n };\n\n // fetched domainSeparator, but not version,\n // version can not exist or just not publicly exposed,\n // ex. aEthUSDT on mainnet\n if (domainSeparator) {\n const guessedParams = guessDomainParams({\n domain,\n chainId,\n domainSeparator,\n });\n domain.version = guessedParams.version;\n domain.chainId = guessedParams.chainId;\n domain.salt = guessedParams.salt;\n }\n\n if (\n domainTypehash &&\n DOMAIN_HASHES_WITHOUT_VERSION.includes(\n domainTypehash.toLowerCase() as Address\n )\n ) {\n delete domain.version;\n } else if (domain.version === undefined) {\n delete domain.version;\n }\n\n if (domain.chainId === undefined) {\n delete domain.chainId;\n }\n\n if (domain.salt === undefined) {\n delete domain.salt;\n }\n }\n\n return {\n type: permitType,\n domain,\n domainSeparator,\n };\n}\n"],"names":["NotDetectedResult","type","domain","EIP_2612_PERMIT_SELECTOR","DAI_PERMIT_SELECTOR","detectPermitSupportType","config","tokenAddress","chainId","isETHaddress","domainResults","readContracts","allowFailure","contracts","abi","EIP_2612_PERMIT_ABI","functionName","address","args","DOMAIN_TYPEHASH_ABI","PERMIT_TYPEHASH_ABI","VERSIONS_ABI","UPGRADABLE_ERC_20_ABI","EIP712_DOMAIN_ABI","DOMAIN_ABIS","versionAndChain","versionAndSalt","withoutVersion","domainSeparator","domainTypehash","permitTypehash","name","version","versionAlt1","versionAlt2","proxyImplementation","eip712Domain","eip712DomainVersionAndChain","eip712DomainVersionAndSalt","eip712DomainWithoutVersion","map","r","result","fields","verifyingContract","salt","extensions","toLowerCase","getDomainFromEIP712Domain","Number","permitType","EIP2612_PERMIT_TYPEHASH","DAI_LIKE_PERMIT_TYPEHASH","contractWithMethods","isAddress","bytecode","getBytecode","includes","slice","guessedParams","guessDomainParams","DOMAIN_HASHES_WITHOUT_VERSION","undefined"],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Address, Hex } from 'viem';
|
|
2
|
+
import { PermitSupportResult } from './detect';
|
|
3
|
+
export declare function getDomainSeparatorVersionChain({ name, version, chainId, verifyingContract, }: {
|
|
4
|
+
name: string;
|
|
5
|
+
version: string;
|
|
6
|
+
chainId: bigint;
|
|
7
|
+
verifyingContract: Address;
|
|
8
|
+
}): Hex;
|
|
9
|
+
export declare function getDomainSeparatorChain({ name, chainId, verifyingContract, }: {
|
|
10
|
+
name: string;
|
|
11
|
+
chainId: bigint;
|
|
12
|
+
verifyingContract: Address;
|
|
13
|
+
}): Hex;
|
|
14
|
+
export declare function getDomainSeparatorVersionSalt({ name, version, salt, verifyingContract, }: {
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
salt: Hex;
|
|
18
|
+
verifyingContract: Address;
|
|
19
|
+
}): Hex;
|
|
20
|
+
type GuessDomainVersionParams = {
|
|
21
|
+
domain: Pick<PermitSupportResult["domain"], "name" | "verifyingContract" | "version">;
|
|
22
|
+
chainId: number;
|
|
23
|
+
domainSeparator: string;
|
|
24
|
+
};
|
|
25
|
+
type GuessDomainVersionResult = {
|
|
26
|
+
version: string;
|
|
27
|
+
chainId?: never;
|
|
28
|
+
salt?: never;
|
|
29
|
+
} | {
|
|
30
|
+
chainId: number;
|
|
31
|
+
version?: never;
|
|
32
|
+
salt?: never;
|
|
33
|
+
} | {
|
|
34
|
+
version: string;
|
|
35
|
+
chainId: number;
|
|
36
|
+
salt?: never;
|
|
37
|
+
} | {
|
|
38
|
+
version: string;
|
|
39
|
+
salt: Hex;
|
|
40
|
+
chainId?: never;
|
|
41
|
+
};
|
|
42
|
+
export declare function guessDomainParams({ domain, chainId, domainSeparator, }: GuessDomainVersionParams): GuessDomainVersionResult;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=domainSeparator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domainSeparator.d.ts","sourceRoot":"","sources":["../../../../src/hooks/permit/utils/domainSeparator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAA0B,MAAM,MAAM,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,wBAAgB,8BAA8B,CAAC,EAC7C,IAAI,EACJ,OAAO,EACP,OAAO,EACP,iBAAiB,GAClB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,GAAG,CA+BN;AAED,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,OAAO,EACP,iBAAiB,GAClB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,GAAG,CAQN;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,iBAAiB,GAClB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC;IACV,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,GAAG,CASN;AA8ED,KAAK,wBAAwB,GAAG;IAC9B,MAAM,EAAE,IAAI,CACV,mBAAmB,CAAC,QAAQ,CAAC,EAC7B,MAAM,GAAG,mBAAmB,GAAG,SAAS,CACzC,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,wBAAwB,GACzB;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,GACD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,GAClD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEN,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,OAAO,EACP,eAAe,GAChB,EAAE,wBAAwB,GAAG,wBAAwB,CAuIrD"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { toHex, domainSeparator } from 'viem';
|
|
2
|
+
|
|
3
|
+
globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || {
|
|
4
|
+
cache: /* @__PURE__ */ new Map(),
|
|
5
|
+
get(name, inst) {
|
|
6
|
+
if (this.cache.has(name)) {
|
|
7
|
+
return this.cache.get(name);
|
|
8
|
+
}
|
|
9
|
+
this.cache.set(name, inst);
|
|
10
|
+
return inst;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
function getDomainSeparatorVersionChain({
|
|
14
|
+
name,
|
|
15
|
+
version,
|
|
16
|
+
chainId,
|
|
17
|
+
verifyingContract
|
|
18
|
+
}) {
|
|
19
|
+
return domainSeparator({
|
|
20
|
+
domain: {
|
|
21
|
+
name,
|
|
22
|
+
version,
|
|
23
|
+
chainId,
|
|
24
|
+
verifyingContract
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function getDomainSeparatorChain({
|
|
29
|
+
name,
|
|
30
|
+
chainId,
|
|
31
|
+
verifyingContract
|
|
32
|
+
}) {
|
|
33
|
+
return domainSeparator({
|
|
34
|
+
domain: {
|
|
35
|
+
name,
|
|
36
|
+
chainId,
|
|
37
|
+
verifyingContract
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function getDomainSeparatorVersionSalt({
|
|
42
|
+
name,
|
|
43
|
+
version,
|
|
44
|
+
salt,
|
|
45
|
+
verifyingContract
|
|
46
|
+
}) {
|
|
47
|
+
return domainSeparator({
|
|
48
|
+
domain: {
|
|
49
|
+
name,
|
|
50
|
+
version,
|
|
51
|
+
verifyingContract,
|
|
52
|
+
salt
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function computeDomainSeparator({
|
|
57
|
+
salt,
|
|
58
|
+
domain,
|
|
59
|
+
chainId
|
|
60
|
+
}) {
|
|
61
|
+
if (salt) {
|
|
62
|
+
const domainSeparator3 = getDomainSeparatorVersionSalt({
|
|
63
|
+
name: domain.name,
|
|
64
|
+
version: domain.version || "1",
|
|
65
|
+
// salt is used together with version
|
|
66
|
+
salt,
|
|
67
|
+
verifyingContract: domain.verifyingContract
|
|
68
|
+
});
|
|
69
|
+
return domainSeparator3;
|
|
70
|
+
}
|
|
71
|
+
if (domain.version) {
|
|
72
|
+
const domainSeparator3 = getDomainSeparatorVersionChain({
|
|
73
|
+
name: domain.name,
|
|
74
|
+
version: domain.version,
|
|
75
|
+
// salt is used together with version
|
|
76
|
+
chainId: BigInt(chainId),
|
|
77
|
+
verifyingContract: domain.verifyingContract
|
|
78
|
+
});
|
|
79
|
+
return domainSeparator3;
|
|
80
|
+
}
|
|
81
|
+
const domainSeparator2 = getDomainSeparatorChain({
|
|
82
|
+
name: domain.name,
|
|
83
|
+
chainId: BigInt(chainId),
|
|
84
|
+
verifyingContract: domain.verifyingContract
|
|
85
|
+
});
|
|
86
|
+
return domainSeparator2;
|
|
87
|
+
}
|
|
88
|
+
function guessDomainParams({
|
|
89
|
+
domain,
|
|
90
|
+
chainId,
|
|
91
|
+
domainSeparator: domainSeparator2
|
|
92
|
+
}) {
|
|
93
|
+
if (domain.version) {
|
|
94
|
+
const standardDomainSeparator2 = computeDomainSeparator({
|
|
95
|
+
domain: {
|
|
96
|
+
name: domain.name,
|
|
97
|
+
version: domain.version,
|
|
98
|
+
// maybe version=1, very often
|
|
99
|
+
verifyingContract: domain.verifyingContract
|
|
100
|
+
},
|
|
101
|
+
chainId
|
|
102
|
+
});
|
|
103
|
+
if (standardDomainSeparator2.toLowerCase() === domainSeparator2.toLowerCase()) {
|
|
104
|
+
return {
|
|
105
|
+
version: domain.version,
|
|
106
|
+
chainId
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const salt2 = toHex(chainId, {
|
|
110
|
+
size: 32
|
|
111
|
+
});
|
|
112
|
+
const domainSeparatorWithSalt2 = computeDomainSeparator({
|
|
113
|
+
domain: {
|
|
114
|
+
name: domain.name,
|
|
115
|
+
version: domain.version,
|
|
116
|
+
verifyingContract: domain.verifyingContract
|
|
117
|
+
},
|
|
118
|
+
salt: salt2,
|
|
119
|
+
chainId
|
|
120
|
+
});
|
|
121
|
+
if (domainSeparatorWithSalt2.toLowerCase() === domainSeparator2.toLowerCase()) {
|
|
122
|
+
return {
|
|
123
|
+
version: domain.version,
|
|
124
|
+
salt: salt2
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
chainId,
|
|
129
|
+
version: domain.version
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const standardDomainSeparator = computeDomainSeparator({
|
|
133
|
+
domain: {
|
|
134
|
+
name: domain.name,
|
|
135
|
+
version: "1",
|
|
136
|
+
// maybe version=1, very often
|
|
137
|
+
verifyingContract: domain.verifyingContract
|
|
138
|
+
},
|
|
139
|
+
chainId
|
|
140
|
+
});
|
|
141
|
+
if (standardDomainSeparator.toLowerCase() === domainSeparator2.toLowerCase()) {
|
|
142
|
+
return {
|
|
143
|
+
version: "1",
|
|
144
|
+
chainId
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const domainSeparatorWithoutVersion = computeDomainSeparator({
|
|
148
|
+
// maybe without version, often for older tokens
|
|
149
|
+
domain: {
|
|
150
|
+
name: domain.name,
|
|
151
|
+
verifyingContract: domain.verifyingContract
|
|
152
|
+
},
|
|
153
|
+
chainId
|
|
154
|
+
});
|
|
155
|
+
if (domainSeparatorWithoutVersion.toLowerCase() === domainSeparator2.toLowerCase()) {
|
|
156
|
+
return {
|
|
157
|
+
chainId
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const salt = toHex(chainId, {
|
|
161
|
+
size: 32
|
|
162
|
+
});
|
|
163
|
+
const domainSeparatorWithSalt = computeDomainSeparator({
|
|
164
|
+
domain: {
|
|
165
|
+
name: domain.name,
|
|
166
|
+
version: "1",
|
|
167
|
+
verifyingContract: domain.verifyingContract
|
|
168
|
+
},
|
|
169
|
+
salt,
|
|
170
|
+
chainId
|
|
171
|
+
});
|
|
172
|
+
if (domainSeparatorWithSalt.toLowerCase() === domainSeparator2.toLowerCase()) {
|
|
173
|
+
return {
|
|
174
|
+
version: "1",
|
|
175
|
+
salt
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const domainSeparatorV2 = computeDomainSeparator({
|
|
179
|
+
domain: {
|
|
180
|
+
name: domain.name,
|
|
181
|
+
version: "2",
|
|
182
|
+
// maybe version=2, often on newer tokens,
|
|
183
|
+
// but usually exposed publicly, together with eip712Domain
|
|
184
|
+
verifyingContract: domain.verifyingContract
|
|
185
|
+
},
|
|
186
|
+
chainId
|
|
187
|
+
});
|
|
188
|
+
if (domainSeparatorV2.toLowerCase() === domainSeparator2.toLowerCase()) {
|
|
189
|
+
return {
|
|
190
|
+
version: "2",
|
|
191
|
+
chainId
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
const domainSeparatorWithSaltV2 = computeDomainSeparator({
|
|
195
|
+
domain: {
|
|
196
|
+
name: domain.name,
|
|
197
|
+
version: "2",
|
|
198
|
+
verifyingContract: domain.verifyingContract
|
|
199
|
+
},
|
|
200
|
+
salt,
|
|
201
|
+
// version=2, but with salt
|
|
202
|
+
chainId
|
|
203
|
+
});
|
|
204
|
+
if (domainSeparatorWithSaltV2.toLowerCase() === domainSeparator2.toLowerCase()) {
|
|
205
|
+
return {
|
|
206
|
+
version: "2",
|
|
207
|
+
salt
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
chainId
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export { getDomainSeparatorChain, getDomainSeparatorVersionChain, getDomainSeparatorVersionSalt, guessDomainParams };
|
|
216
|
+
//# sourceMappingURL=domainSeparator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domainSeparator.js","sources":["../../../../src/hooks/permit/utils/domainSeparator.ts"],"sourcesContent":["import { type Address, type Hex, domainSeparator, toHex } from \"viem\";\nimport type { PermitSupportResult } from \"./detect\";\n\nexport function getDomainSeparatorVersionChain({\n name,\n version,\n chainId,\n verifyingContract,\n}: {\n name: string;\n version: string;\n chainId: bigint;\n verifyingContract: Address;\n}): Hex {\n /**\n * Internally does\n const EIP712_DOMAIN_TYPEHASH = keccak256(\n toBytes(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\")\n );\n\n const nameHash = keccak256(toBytes(name));\n const versionHash = keccak256(toBytes(version));\n\n const encoded = encodeAbiParameters(\n [\n { type: 'bytes32', name: 'typeHash' },\n { type: 'bytes32', name: 'nameHash' },\n { type: 'bytes32', name: 'versionHash' },\n { type: 'uint256', name: 'chainId' },\n { type: 'address', name: 'verifyingContract' },\n ],\n [EIP712_DOMAIN_TYPEHASH, nameHash, versionHash, chainId, verifyingContract]\n );\n\n return keccak256(encoded);\n */\n return domainSeparator({\n domain: {\n name,\n version,\n chainId,\n verifyingContract,\n },\n });\n}\n\nexport function getDomainSeparatorChain({\n name,\n chainId,\n verifyingContract,\n}: {\n name: string;\n chainId: bigint;\n verifyingContract: Address;\n}): Hex {\n return domainSeparator({\n domain: {\n name,\n chainId,\n verifyingContract,\n },\n });\n}\n\nexport function getDomainSeparatorVersionSalt({\n name,\n version,\n salt,\n verifyingContract,\n}: {\n name: string;\n version: string;\n salt: Hex;\n verifyingContract: Address;\n}): Hex {\n return domainSeparator({\n domain: {\n name,\n version,\n verifyingContract,\n salt,\n },\n });\n}\n\ntype ComputeDomainSeparatorParams = {\n salt?: Hex; // used as salt (ex. USDC.e on Polygon)\n domain: Pick<\n PermitSupportResult[\"domain\"],\n \"name\" | \"version\" | \"verifyingContract\"\n >;\n chainId: number;\n};\n\nfunction computeDomainSeparator({\n salt,\n domain,\n chainId,\n}: ComputeDomainSeparatorParams): Hex {\n if (salt) {\n /** with salt (ex. USDC.e on Polygon)\n * DOMAIN_SEPARATOR = keccak256(\n abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n bytes32(chainId) // salt\n )\n );\n }\n */\n\n const domainSeparator = getDomainSeparatorVersionSalt({\n name: domain.name,\n version: domain.version || \"1\", // salt is used together with version\n salt,\n verifyingContract: domain.verifyingContract,\n });\n\n return domainSeparator;\n }\n\n if (domain.version) {\n /** standard domainSeparator, with version and chainId\n * DOMAIN_SEPARATOR = keccak256(abi.encode(\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"),\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n chainId, // uint256\n address(this)\n ));\n */\n const domainSeparator = getDomainSeparatorVersionChain({\n name: domain.name,\n version: domain.version, // salt is used together with version\n chainId: BigInt(chainId),\n verifyingContract: domain.verifyingContract,\n });\n\n return domainSeparator;\n }\n\n /** without version\n * DOMAIN_SEPARATOR = keccak256(abi.encode(\n keccak256(\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\"),\n keccak256(bytes(name)),\n chainId, // uint256\n address(this)\n ));\n */\n\n const domainSeparator = getDomainSeparatorChain({\n name: domain.name,\n chainId: BigInt(chainId),\n verifyingContract: domain.verifyingContract,\n });\n\n return domainSeparator;\n}\n\ntype GuessDomainVersionParams = {\n domain: Pick<\n PermitSupportResult[\"domain\"],\n \"name\" | \"verifyingContract\" | \"version\"\n >;\n chainId: number;\n domainSeparator: string;\n};\n\ntype GuessDomainVersionResult =\n | {\n version: string;\n chainId?: never;\n salt?: never;\n }\n | { chainId: number; version?: never; salt?: never }\n | {\n version: string;\n chainId: number;\n salt?: never;\n }\n | {\n version: string;\n salt: Hex;\n chainId?: never;\n };\n\nexport function guessDomainParams({\n domain,\n chainId,\n domainSeparator,\n}: GuessDomainVersionParams): GuessDomainVersionResult {\n // version was read from the contract, so it's included for certain\n if (domain.version) {\n const standardDomainSeparator = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: domain.version, // maybe version=1, very often\n verifyingContract: domain.verifyingContract,\n },\n chainId,\n });\n\n if (\n standardDomainSeparator.toLowerCase() === domainSeparator.toLowerCase()\n ) {\n return {\n version: domain.version,\n chainId,\n };\n }\n\n // left-padded to bytes32\n const salt = toHex(chainId, { size: 32 }); // chainId used as salt (ex. USDC.e on Polygon)\n\n const domainSeparatorWithSalt = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: domain.version,\n verifyingContract: domain.verifyingContract,\n },\n salt,\n chainId,\n });\n\n if (\n domainSeparatorWithSalt.toLowerCase() === domainSeparator.toLowerCase()\n ) {\n return {\n version: domain.version,\n salt,\n };\n }\n\n // even rarer domainSeparator, can't really guess params\n return { chainId, version: domain.version };\n }\n\n const standardDomainSeparator = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: \"1\", // maybe version=1, very often\n verifyingContract: domain.verifyingContract,\n },\n chainId,\n });\n\n if (standardDomainSeparator.toLowerCase() === domainSeparator.toLowerCase()) {\n return {\n version: \"1\",\n chainId,\n };\n }\n\n const domainSeparatorWithoutVersion = computeDomainSeparator({\n // maybe without version, often for older tokens\n domain: { name: domain.name, verifyingContract: domain.verifyingContract },\n chainId,\n });\n\n if (\n domainSeparatorWithoutVersion.toLowerCase() ===\n domainSeparator.toLowerCase()\n ) {\n return {\n chainId,\n };\n }\n\n const salt = toHex(chainId, { size: 32 }); // chainId used as salt (ex. USDC.e on Polygon)\n\n const domainSeparatorWithSalt = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: \"1\",\n verifyingContract: domain.verifyingContract,\n },\n salt,\n chainId,\n });\n\n if (domainSeparatorWithSalt.toLowerCase() === domainSeparator.toLowerCase()) {\n return {\n version: \"1\",\n salt,\n };\n }\n\n const domainSeparatorV2 = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: \"2\", // maybe version=2, often on newer tokens,\n // but usually exposed publicly, together with eip712Domain\n verifyingContract: domain.verifyingContract,\n },\n chainId,\n });\n\n if (domainSeparatorV2.toLowerCase() === domainSeparator.toLowerCase()) {\n return {\n version: \"2\",\n chainId,\n };\n }\n\n const domainSeparatorWithSaltV2 = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: \"2\",\n verifyingContract: domain.verifyingContract,\n },\n salt, // version=2, but with salt\n chainId,\n });\n\n if (\n domainSeparatorWithSaltV2.toLowerCase() === domainSeparator.toLowerCase()\n ) {\n return {\n version: \"2\",\n salt,\n };\n }\n\n // even rarer domainSeparator, can't really guess params\n return { chainId };\n}\n"],"names":["getDomainSeparatorVersionChain","name","version","chainId","verifyingContract","domainSeparator","domain","getDomainSeparatorChain","getDomainSeparatorVersionSalt","salt","computeDomainSeparator","BigInt","guessDomainParams","standardDomainSeparator","toLowerCase","toHex","size","domainSeparatorWithSalt","domainSeparatorWithoutVersion","domainSeparatorV2","domainSeparatorWithSaltV2"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Hash } from 'viem';
|
|
2
|
+
import { DaiPermitInput, Permit1PermitInput } from './construct';
|
|
3
|
+
type EncodePermitMethodArgsInputEIP2612 = Pick<Permit1PermitInput, "owner" | "spender" | "value" | "nonce" | "deadline" | "type"> & {
|
|
4
|
+
signature: Hash;
|
|
5
|
+
};
|
|
6
|
+
type EncodePermitMethodArgsInputDAI = Pick<DaiPermitInput, "holder" | "spender" | "nonce" | "expiry" | "allowed" | "type"> & {
|
|
7
|
+
signature: Hash;
|
|
8
|
+
};
|
|
9
|
+
export declare function encodePermitMethodArgs(input: EncodePermitMethodArgsInputEIP2612 | EncodePermitMethodArgsInputDAI): Hash;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=encodeArgs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encodeArgs.d.ts","sourceRoot":"","sources":["../../../../src/hooks/permit/utils/encodeArgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtE,KAAK,kCAAkC,GAAG,IAAI,CAC5C,kBAAkB,EAClB,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAC9D,GAAG;IACF,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF,KAAK,8BAA8B,GAAG,IAAI,CACxC,cAAc,EACd,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAC/D,GAAG;IACF,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AASF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,kCAAkC,GAAG,8BAA8B,GACzE,IAAI,CAuBN"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { parseSignature, encodeAbiParameters } from 'viem';
|
|
2
|
+
import { EIP_2612_PERMIT_ABI, DAI_PERMIT_ABI } from './abi.js';
|
|
3
|
+
|
|
4
|
+
globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || {
|
|
5
|
+
cache: /* @__PURE__ */ new Map(),
|
|
6
|
+
get(name, inst) {
|
|
7
|
+
if (this.cache.has(name)) {
|
|
8
|
+
return this.cache.get(name);
|
|
9
|
+
}
|
|
10
|
+
this.cache.set(name, inst);
|
|
11
|
+
return inst;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const EIP_2612_PERMIT_PARAMETERS = EIP_2612_PERMIT_ABI.find((abiItem) => abiItem.name === "permit").inputs;
|
|
15
|
+
const DAI_PERMIT_PARAMETERS = DAI_PERMIT_ABI.find((abiItem) => abiItem.name === "permit").inputs;
|
|
16
|
+
function encodePermitMethodArgs(input) {
|
|
17
|
+
const {
|
|
18
|
+
r,
|
|
19
|
+
s,
|
|
20
|
+
v
|
|
21
|
+
} = parseSignature(input.signature);
|
|
22
|
+
if (input.type === "permit1") {
|
|
23
|
+
return encodeAbiParameters(EIP_2612_PERMIT_PARAMETERS, [input.owner, input.spender, input.value, input.deadline, Number(v), r, s]);
|
|
24
|
+
}
|
|
25
|
+
return encodeAbiParameters(DAI_PERMIT_PARAMETERS, [input.holder, input.spender, input.nonce, input.expiry, input.allowed, Number(v), r, s]);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { encodePermitMethodArgs };
|
|
29
|
+
//# sourceMappingURL=encodeArgs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encodeArgs.js","sources":["../../../../src/hooks/permit/utils/encodeArgs.ts"],"sourcesContent":["import { encodeAbiParameters, parseSignature, type Hash } from \"viem\";\nimport { DAI_PERMIT_ABI, EIP_2612_PERMIT_ABI } from \"./abi\";\nimport type { DaiPermitInput, Permit1PermitInput } from \"./construct\";\n\ntype EncodePermitMethodArgsInputEIP2612 = Pick<\n Permit1PermitInput,\n \"owner\" | \"spender\" | \"value\" | \"nonce\" | \"deadline\" | \"type\"\n> & {\n signature: Hash;\n};\n\ntype EncodePermitMethodArgsInputDAI = Pick<\n DaiPermitInput,\n \"holder\" | \"spender\" | \"nonce\" | \"expiry\" | \"allowed\" | \"type\"\n> & {\n signature: Hash;\n};\n\nconst EIP_2612_PERMIT_PARAMETERS = EIP_2612_PERMIT_ABI.find(\n (abiItem) => abiItem.name === \"permit\"\n)!.inputs;\nconst DAI_PERMIT_PARAMETERS = DAI_PERMIT_ABI.find(\n (abiItem) => abiItem.name === \"permit\"\n)!.inputs;\n\nexport function encodePermitMethodArgs(\n input: EncodePermitMethodArgsInputEIP2612 | EncodePermitMethodArgsInputDAI\n): Hash {\n const { r, s, v } = parseSignature(input.signature);\n if (input.type === \"permit1\") {\n return encodeAbiParameters(EIP_2612_PERMIT_PARAMETERS, [\n input.owner,\n input.spender,\n input.value,\n input.deadline,\n Number(v),\n r,\n s,\n ]);\n }\n return encodeAbiParameters(DAI_PERMIT_PARAMETERS, [\n input.holder,\n input.spender,\n input.nonce,\n input.expiry,\n input.allowed,\n Number(v),\n r,\n s,\n ]);\n}\n"],"names":["EIP_2612_PERMIT_PARAMETERS","EIP_2612_PERMIT_ABI","find","abiItem","name","inputs","DAI_PERMIT_PARAMETERS","DAI_PERMIT_ABI","encodePermitMethodArgs","input","r","s","v","parseSignature","signature","type","encodeAbiParameters","owner","spender","value","deadline","Number","holder","nonce","expiry","allowed"],"mappings":";;;;;;;;;;;;;AAkBA,MAAMA,6BAA6BC,mBAAAA,CAAoBC,IAAAA,CACpDC,aAAYA,OAAAA,CAAQC,IAAAA,KAAS,QAChC,CAAA,CAAGC,MAAAA;AACH,MAAMC,wBAAwBC,cAAAA,CAAeL,IAAAA,CAC1CC,aAAYA,OAAAA,CAAQC,IAAAA,KAAS,QAChC,CAAA,CAAGC,MAAAA;AAEI,SAASG,uBACdC,KAAAA,EACM;AACN,EAAA,MAAM;AAAA,IAAEC,CAAAA;AAAAA,IAAGC,CAAAA;AAAAA,IAAGC;AAAAA,GAAE,GAAIC,cAAAA,CAAeJ,KAAAA,CAAMK,SAAS,CAAA;AAClD,EAAA,IAAIL,KAAAA,CAAMM,SAAS,SAAA,EAAW;AAC5B,IAAA,OAAOC,oBAAoBhB,0BAAAA,EAA4B,CACrDS,KAAAA,CAAMQ,KAAAA,EACNR,MAAMS,OAAAA,EACNT,KAAAA,CAAMU,KAAAA,EACNV,KAAAA,CAAMW,UACNC,MAAAA,CAAOT,CAAC,CAAA,EACRF,CAAAA,EACAC,CAAC,CACF,CAAA;AAAA;AAEH,EAAA,OAAOK,oBAAoBV,qBAAAA,EAAuB,CAChDG,MAAMa,MAAAA,EACNb,KAAAA,CAAMS,SACNT,KAAAA,CAAMc,KAAAA,EACNd,KAAAA,CAAMe,MAAAA,EACNf,MAAMgB,OAAAA,EACNJ,MAAAA,CAAOT,CAAC,CAAA,EACRF,CAAAA,EACAC,CAAC,CACF,CAAA;AACH;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Config } from '@wagmi/core';
|
|
2
|
+
import { Address } from 'viem';
|
|
3
|
+
import { NotDetectedPermitSupport, PermitSupportResult } from './detect';
|
|
4
|
+
import { NonceMethod } from '../hooks/usePermit1Nonce';
|
|
5
|
+
import { SupportedChainId } from '../../../lib/web3/wagmi/types';
|
|
6
|
+
export type TrySignPermitParams = {
|
|
7
|
+
config: Config;
|
|
8
|
+
permitInfo: PermitSupportResult | NotDetectedPermitSupport;
|
|
9
|
+
tokenAddress: Address;
|
|
10
|
+
spenderAddress?: Address;
|
|
11
|
+
amount?: bigint;
|
|
12
|
+
chainId: SupportedChainId;
|
|
13
|
+
};
|
|
14
|
+
export type TrySignPermitSuccess = {
|
|
15
|
+
tokenAddress: Address;
|
|
16
|
+
chainId: SupportedChainId;
|
|
17
|
+
permitInfo: PermitSupportResult;
|
|
18
|
+
success: true;
|
|
19
|
+
error: null;
|
|
20
|
+
nonceBefore: bigint;
|
|
21
|
+
nonceAfter: bigint;
|
|
22
|
+
nonceMethod: NonceMethod;
|
|
23
|
+
};
|
|
24
|
+
export type TrySignPermitFailure = {
|
|
25
|
+
tokenAddress: Address;
|
|
26
|
+
chainId: SupportedChainId;
|
|
27
|
+
permitInfo: PermitSupportResult | NotDetectedPermitSupport;
|
|
28
|
+
success: false;
|
|
29
|
+
error: string;
|
|
30
|
+
};
|
|
31
|
+
export type TrySignPermitResult = TrySignPermitSuccess | TrySignPermitFailure;
|
|
32
|
+
/**
|
|
33
|
+
* Ultimate check if signing a permit will succeed with detected permitInfo
|
|
34
|
+
* Tests permit functionality by:
|
|
35
|
+
* 1. Creating a random wallet
|
|
36
|
+
* 2. Reading the wallet's nonce
|
|
37
|
+
* 3. Signing permit data with the wallet
|
|
38
|
+
* 4. Making a multicall with: [read nonce, permit(), read nonce]
|
|
39
|
+
* 5. Verifying the nonce increased (indicating permit was processed)
|
|
40
|
+
*/
|
|
41
|
+
export declare function trySignPermit1({ config, chainId, permitInfo, tokenAddress, spenderAddress, amount, }: TrySignPermitParams): Promise<TrySignPermitResult>;
|
|
42
|
+
//# sourceMappingURL=trySignPermit1.d.ts.map
|