@velora-dex/widget 0.0.13 → 0.0.15
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/accordion.js +0 -10
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/badge.js +0 -10
- package/dist/components/ui/badge.js.map +1 -1
- package/dist/components/ui/button.js +0 -10
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/card.js +0 -10
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/counter.js +0 -10
- package/dist/components/ui/counter.js.map +1 -1
- package/dist/components/ui/dialog.js +0 -10
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/drawer.js +0 -10
- package/dist/components/ui/drawer.js.map +1 -1
- package/dist/components/ui/dropdown-menu.js +19 -35
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/header.js +0 -10
- package/dist/components/ui/header.js.map +1 -1
- package/dist/components/ui/input.js +0 -10
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/select.js +0 -10
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/skeleton.js +0 -10
- package/dist/components/ui/skeleton.js.map +1 -1
- package/dist/components/ui/sonner.js +0 -10
- package/dist/components/ui/sonner.js.map +1 -1
- package/dist/components/ui/switch.js +0 -10
- package/dist/components/ui/switch.js.map +1 -1
- package/dist/components/ui/tooltip.js +0 -10
- package/dist/components/ui/tooltip.js.map +1 -1
- package/dist/components/ui/vaul/browser.js +0 -10
- package/dist/components/ui/vaul/browser.js.map +1 -1
- package/dist/components/ui/vaul/constants.js +0 -10
- package/dist/components/ui/vaul/constants.js.map +1 -1
- package/dist/components/ui/vaul/context.js +0 -10
- package/dist/components/ui/vaul/context.js.map +1 -1
- package/dist/components/ui/vaul/helpers.js +0 -10
- package/dist/components/ui/vaul/helpers.js.map +1 -1
- package/dist/components/ui/vaul/index.js +1 -11
- package/dist/components/ui/vaul/index.js.map +1 -1
- package/dist/components/ui/vaul/use-composed-refs.js +0 -10
- package/dist/components/ui/vaul/use-composed-refs.js.map +1 -1
- package/dist/components/ui/vaul/use-controllable-state.js +0 -10
- package/dist/components/ui/vaul/use-controllable-state.js.map +1 -1
- package/dist/components/ui/vaul/use-position-fixed.js +0 -10
- package/dist/components/ui/vaul/use-position-fixed.js.map +1 -1
- package/dist/components/ui/vaul/use-prevent-scroll.js +0 -10
- package/dist/components/ui/vaul/use-prevent-scroll.js.map +1 -1
- package/dist/components/ui/vaul/use-scale-background.js +0 -10
- package/dist/components/ui/vaul/use-scale-background.js.map +1 -1
- package/dist/components/ui/vaul/use-snap-points.js +0 -10
- package/dist/components/ui/vaul/use-snap-points.js.map +1 -1
- package/dist/components/web3/AccountButton.js +0 -10
- package/dist/components/web3/AccountButton.js.map +1 -1
- package/dist/components/web3/ConnectWallets/WalletConnectButtons.js +0 -10
- package/dist/components/web3/ConnectWallets/WalletConnectButtons.js.map +1 -1
- package/dist/components/web3/ConnectWallets/index.js +0 -10
- package/dist/components/web3/ConnectWallets/index.js.map +1 -1
- package/dist/components/web3/ConnectWallets/privy/button.js +0 -10
- package/dist/components/web3/ConnectWallets/privy/button.js.map +1 -1
- package/dist/components/web3/ConnectWallets/privy/connectRunner.js +0 -10
- package/dist/components/web3/ConnectWallets/privy/connectRunner.js.map +1 -1
- package/dist/components/web3/ConnectWallets/privy/iframe.js +0 -10
- package/dist/components/web3/ConnectWallets/privy/iframe.js.map +1 -1
- package/dist/components/web3/ConnectWallets/privy/provider.js +0 -10
- package/dist/components/web3/ConnectWallets/privy/provider.js.map +1 -1
- package/dist/components/web3/ConnectWallets/walletIcons.js +0 -10
- package/dist/components/web3/ConnectWallets/walletIcons.js.map +1 -1
- package/dist/components/web3/providers.js +0 -10
- package/dist/components/web3/providers.js.map +1 -1
- package/dist/components/widget/AppHeader/ActivityButton.js +0 -10
- package/dist/components/widget/AppHeader/ActivityButton.js.map +1 -1
- package/dist/components/widget/AppHeader/AppHeader.js +0 -10
- package/dist/components/widget/AppHeader/AppHeader.js.map +1 -1
- package/dist/components/widget/Details/DetailWithTooltip.js +0 -10
- package/dist/components/widget/Details/DetailWithTooltip.js.map +1 -1
- package/dist/components/widget/Details/DetailWithValueList.js +0 -10
- package/dist/components/widget/Details/DetailWithValueList.js.map +1 -1
- package/dist/components/widget/Details/DetailWithValueListExpandable.js +0 -10
- package/dist/components/widget/Details/DetailWithValueListExpandable.js.map +1 -1
- package/dist/components/widget/Details/SwapDetailsExpandable.js +0 -10
- package/dist/components/widget/Details/SwapDetailsExpandable.js.map +1 -1
- package/dist/components/widget/Dialog/ConnectWalletDialog/ConnectWalletDialog.js +0 -10
- package/dist/components/widget/Dialog/ConnectWalletDialog/ConnectWalletDialog.js.map +1 -1
- package/dist/components/widget/Dialog/DialogRoot.js +0 -10
- package/dist/components/widget/Dialog/DialogRoot.js.map +1 -1
- package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressDialog.js +0 -10
- package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressDialog.js.map +1 -1
- package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressInput.js +0 -10
- package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressInput.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js +0 -10
- package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/AcrossTokenList.js +0 -10
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/AcrossTokenList.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.js +0 -10
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListBody.js +0 -10
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListBody.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenSearch.js +0 -10
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenSearch.js.map +1 -1
- package/dist/components/widget/Dialog/dialogByType.js +0 -10
- package/dist/components/widget/Dialog/dialogByType.js.map +1 -1
- package/dist/components/widget/Dialog/state/dialogAtom.js +1 -12
- package/dist/components/widget/Dialog/state/dialogAtom.js.map +1 -1
- package/dist/components/widget/Drawer/index.js +0 -10
- package/dist/components/widget/Drawer/index.js.map +1 -1
- package/dist/components/widget/Drawer/state/useDrawerControls.d.ts +1 -1
- package/dist/components/widget/Drawer/state/useDrawerControls.d.ts.map +1 -1
- package/dist/components/widget/Drawer/state/useDrawerControls.js +36 -36
- package/dist/components/widget/Drawer/state/useDrawerControls.js.map +1 -1
- package/dist/components/widget/Dropdown/DropdownWithItems.js +0 -10
- package/dist/components/widget/Dropdown/DropdownWithItems.js.map +1 -1
- package/dist/components/widget/Icon/CheckIcon.js +0 -10
- package/dist/components/widget/Icon/CheckIcon.js.map +1 -1
- package/dist/components/widget/Icon/ChevronIcon.js +0 -10
- package/dist/components/widget/Icon/ChevronIcon.js.map +1 -1
- package/dist/components/widget/Icon/DeltaIcon.js +0 -10
- package/dist/components/widget/Icon/DeltaIcon.js.map +1 -1
- package/dist/components/widget/Icon/EllipseIcon.js +0 -10
- package/dist/components/widget/Icon/EllipseIcon.js.map +1 -1
- package/dist/components/widget/Icon/InfoIcon.js +0 -10
- package/dist/components/widget/Icon/InfoIcon.js.map +1 -1
- package/dist/components/widget/Icon/MarketIcon.js +0 -10
- package/dist/components/widget/Icon/MarketIcon.js.map +1 -1
- package/dist/components/widget/Icon/SliderIcon.js +0 -10
- package/dist/components/widget/Icon/SliderIcon.js.map +1 -1
- package/dist/components/widget/Informative/Informative.js +0 -10
- package/dist/components/widget/Informative/Informative.js.map +1 -1
- package/dist/components/widget/Line/Line.js +0 -10
- package/dist/components/widget/Line/Line.js.map +1 -1
- package/dist/components/widget/NetworkIcon/NetworkIconSquare.js +0 -10
- package/dist/components/widget/NetworkIcon/NetworkIconSquare.js.map +1 -1
- package/dist/components/widget/NetworkSwitcher/CompactNetworkSwitcher.js +0 -10
- package/dist/components/widget/NetworkSwitcher/CompactNetworkSwitcher.js.map +1 -1
- package/dist/components/widget/NetworkSwitcher/NetworkSwitcherDropdown.js +0 -10
- package/dist/components/widget/NetworkSwitcher/NetworkSwitcherDropdown.js.map +1 -1
- package/dist/components/widget/NetworkWithIcon/NetworkIconWithChevron.js +0 -10
- package/dist/components/widget/NetworkWithIcon/NetworkIconWithChevron.js.map +1 -1
- package/dist/components/widget/NetworkWithIcon/NetworkWithIcon.js +0 -10
- package/dist/components/widget/NetworkWithIcon/NetworkWithIcon.js.map +1 -1
- package/dist/components/widget/PoweredBy/PoweredBy.js +0 -10
- package/dist/components/widget/PoweredBy/PoweredBy.js.map +1 -1
- package/dist/components/widget/ReceiverAddress/ReceiverAddress.js +0 -10
- package/dist/components/widget/ReceiverAddress/ReceiverAddress.js.map +1 -1
- package/dist/components/widget/ReceiverAddress/state/receiverAddressAtom.js +1 -12
- package/dist/components/widget/ReceiverAddress/state/receiverAddressAtom.js.map +1 -1
- package/dist/components/widget/ReceiverAddress/state/subscriptions.js +0 -10
- package/dist/components/widget/ReceiverAddress/state/subscriptions.js.map +1 -1
- package/dist/components/widget/RowVirtualizer/RowVirtualizerFixed.js +0 -10
- package/dist/components/widget/RowVirtualizer/RowVirtualizerFixed.js.map +1 -1
- package/dist/components/widget/SelectToken/SelectTokenButton.js +0 -11
- package/dist/components/widget/SelectToken/SelectTokenButton.js.map +1 -1
- package/dist/components/widget/SwapModeSwitcher/SwapModeSwitcherExpandable.js +0 -10
- package/dist/components/widget/SwapModeSwitcher/SwapModeSwitcherExpandable.js.map +1 -1
- package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js +2 -13
- package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js.map +1 -1
- package/dist/components/widget/SwapModeSwitcher/state/swapModeAtom.js +3 -15
- package/dist/components/widget/SwapModeSwitcher/state/swapModeAtom.js.map +1 -1
- package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js +2 -13
- package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js.map +1 -1
- package/dist/components/widget/SwapRate/SwapRate.js +0 -10
- package/dist/components/widget/SwapRate/SwapRate.js.map +1 -1
- package/dist/components/widget/TokenBadge/TokenBadge.js +0 -10
- package/dist/components/widget/TokenBadge/TokenBadge.js.map +1 -1
- package/dist/components/widget/TokenInput/EmptyInput.js +0 -10
- package/dist/components/widget/TokenInput/EmptyInput.js.map +1 -1
- package/dist/components/widget/TokenInput/index.js +0 -10
- package/dist/components/widget/TokenInput/index.js.map +1 -1
- package/dist/components/widget/TokenSwitcher/TokenSwitcher.js +0 -10
- package/dist/components/widget/TokenSwitcher/TokenSwitcher.js.map +1 -1
- package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js +0 -10
- package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js +0 -10
- package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/Step.js +0 -10
- package/dist/components/widget/TradeOverview/Step.js.map +1 -1
- package/dist/components/widget/TradeOverview/Stepper.js +0 -10
- package/dist/components/widget/TradeOverview/Stepper.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js +0 -10
- package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.js +0 -10
- package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/TradeCompletedDetails.js +0 -10
- package/dist/components/widget/TradeOverview/TradeComplete/TradeCompletedDetails.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/index.js +0 -10
- package/dist/components/widget/TradeOverview/TradeComplete/index.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/useTradeCompleteDetails.js +0 -10
- package/dist/components/widget/TradeOverview/TradeComplete/useTradeCompleteDetails.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/utils.js +0 -10
- package/dist/components/widget/TradeOverview/TradeComplete/utils.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeDetails.js +0 -10
- package/dist/components/widget/TradeOverview/TradeDetails.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeDetailsDisplay.js +0 -10
- package/dist/components/widget/TradeOverview/TradeDetailsDisplay.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeOverview.js +0 -10
- package/dist/components/widget/TradeOverview/TradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeOverviewFooter.js +0 -10
- package/dist/components/widget/TradeOverview/TradeOverviewFooter.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeOverviewHeader.js +0 -10
- package/dist/components/widget/TradeOverview/TradeOverviewHeader.js.map +1 -1
- package/dist/components/widget/TradeOverview/VerticalDash.js +0 -10
- package/dist/components/widget/TradeOverview/VerticalDash.js.map +1 -1
- package/dist/components/widget/TradeOverview/steps.js +0 -10
- package/dist/components/widget/TradeOverview/steps.js.map +1 -1
- package/dist/components/widget/TradeOverview/tradeFlowContext.js +0 -10
- package/dist/components/widget/TradeOverview/tradeFlowContext.js.map +1 -1
- package/dist/components/widget/TradeParameters/DeltaParameter.js +0 -10
- package/dist/components/widget/TradeParameters/DeltaParameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/SlippageParameter/CustomSlippageInput.js +0 -10
- package/dist/components/widget/TradeParameters/SlippageParameter/CustomSlippageInput.js.map +1 -1
- package/dist/components/widget/TradeParameters/SlippageParameter/EditSlippage.js +0 -10
- package/dist/components/widget/TradeParameters/SlippageParameter/EditSlippage.js.map +1 -1
- package/dist/components/widget/TradeParameters/SlippageParameter/SlippageParameter.js +0 -10
- package/dist/components/widget/TradeParameters/SlippageParameter/SlippageParameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/SlippageParameter/hooks/useCustomSlippageProps.js +0 -10
- package/dist/components/widget/TradeParameters/SlippageParameter/hooks/useCustomSlippageProps.js.map +1 -1
- package/dist/components/widget/TradeParameters/TradeParameters.js +0 -10
- package/dist/components/widget/TradeParameters/TradeParameters.js.map +1 -1
- package/dist/components/widget/TradeParameters/hooks/useIsNotDefaultAnyParameter.js +0 -10
- package/dist/components/widget/TradeParameters/hooks/useIsNotDefaultAnyParameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/constants.js +0 -10
- package/dist/components/widget/TradeParameters/state/constants.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.js +2 -13
- package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/deltaParamAtom.js +3 -15
- package/dist/components/widget/TradeParameters/state/deltaParamAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/slippageParamActionsAtom.js +2 -13
- package/dist/components/widget/TradeParameters/state/slippageParamActionsAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/slippageParamAtom.js +3 -15
- package/dist/components/widget/TradeParameters/state/slippageParamAtom.js.map +1 -1
- package/dist/components/widget/Warning/InsufficientBalanceMessage.js +0 -10
- package/dist/components/widget/Warning/InsufficientBalanceMessage.js.map +1 -1
- package/dist/components/widget/Warning/Warning.js +0 -10
- package/dist/components/widget/Warning/Warning.js.map +1 -1
- package/dist/components/widget/Warning/WarningMessage.js +0 -10
- package/dist/components/widget/Warning/WarningMessage.js.map +1 -1
- package/dist/components/widget/WrapEth/WrapEthContent.js +0 -10
- package/dist/components/widget/WrapEth/WrapEthContent.js.map +1 -1
- package/dist/components/widget/WrapEth/WrapEthDrawerButton.js +0 -10
- package/dist/components/widget/WrapEth/WrapEthDrawerButton.js.map +1 -1
- package/dist/components/widget/WrapEth/hooks/useSubmitDepositTxMutation.js +0 -10
- package/dist/components/widget/WrapEth/hooks/useSubmitDepositTxMutation.js.map +1 -1
- package/dist/components/widget/WrapEth/hooks/useWrapEthProps.js +0 -10
- package/dist/components/widget/WrapEth/hooks/useWrapEthProps.js.map +1 -1
- package/dist/components/widget/YouGet/YouGet.js +0 -10
- package/dist/components/widget/YouGet/YouGet.js.map +1 -1
- package/dist/hooks/gas/config.js +0 -10
- package/dist/hooks/gas/config.js.map +1 -1
- package/dist/hooks/gas/useGasPrices.js +0 -10
- package/dist/hooks/gas/useGasPrices.js.map +1 -1
- package/dist/hooks/gas/utils.js +0 -10
- package/dist/hooks/gas/utils.js.map +1 -1
- package/dist/hooks/getCode/query.js +0 -10
- package/dist/hooks/getCode/query.js.map +1 -1
- package/dist/hooks/getCode/useIsAccountContract.js +0 -10
- package/dist/hooks/getCode/useIsAccountContract.js.map +1 -1
- package/dist/hooks/getCode/useIsContractAtAddress.js +0 -10
- package/dist/hooks/getCode/useIsContractAtAddress.js.map +1 -1
- package/dist/hooks/permit/hooks/useGetPermitInfo.js +0 -10
- package/dist/hooks/permit/hooks/useGetPermitInfo.js.map +1 -1
- package/dist/hooks/permit/hooks/useGetSafePermitInfo.js +0 -10
- package/dist/hooks/permit/hooks/useGetSafePermitInfo.js.map +1 -1
- package/dist/hooks/permit/hooks/usePermit1Nonce.js +1 -12
- package/dist/hooks/permit/hooks/usePermit1Nonce.js.map +1 -1
- package/dist/hooks/permit/hooks/useSignArbitraryTypedData.js +0 -10
- package/dist/hooks/permit/hooks/useSignArbitraryTypedData.js.map +1 -1
- package/dist/hooks/permit/hooks/useSignPermit.js +0 -10
- package/dist/hooks/permit/hooks/useSignPermit.js.map +1 -1
- package/dist/hooks/permit/hooks/useSignTokenFromPermit1.js +0 -10
- package/dist/hooks/permit/hooks/useSignTokenFromPermit1.js.map +1 -1
- package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.js +0 -10
- package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.js.map +1 -1
- package/dist/hooks/permit/hooks/useTokenFromPermitInfo.js +0 -10
- package/dist/hooks/permit/hooks/useTokenFromPermitInfo.js.map +1 -1
- package/dist/hooks/permit/hooks/useTryToSignPermit1.js +0 -10
- package/dist/hooks/permit/hooks/useTryToSignPermit1.js.map +1 -1
- package/dist/hooks/permit/utils/abi.js +0 -10
- package/dist/hooks/permit/utils/abi.js.map +1 -1
- package/dist/hooks/permit/utils/constants.js +0 -10
- package/dist/hooks/permit/utils/constants.js.map +1 -1
- package/dist/hooks/permit/utils/construct.js +0 -10
- package/dist/hooks/permit/utils/construct.js.map +1 -1
- package/dist/hooks/permit/utils/detect.js +0 -10
- package/dist/hooks/permit/utils/detect.js.map +1 -1
- package/dist/hooks/permit/utils/domainSeparator.js +0 -10
- package/dist/hooks/permit/utils/domainSeparator.js.map +1 -1
- package/dist/hooks/permit/utils/encodeArgs.js +0 -10
- package/dist/hooks/permit/utils/encodeArgs.js.map +1 -1
- package/dist/hooks/permit/utils/trySignPermit1.js +0 -10
- package/dist/hooks/permit/utils/trySignPermit1.js.map +1 -1
- package/dist/hooks/permit/utils/utils.js +0 -10
- package/dist/hooks/permit/utils/utils.js.map +1 -1
- package/dist/hooks/sdk/useGetContracts.js +0 -10
- package/dist/hooks/sdk/useGetContracts.js.map +1 -1
- package/dist/hooks/sdk/useSpender.js +0 -10
- package/dist/hooks/sdk/useSpender.js.map +1 -1
- package/dist/hooks/swap/prices/delta/bridge/utils.js +0 -10
- package/dist/hooks/swap/prices/delta/bridge/utils.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js +0 -10
- package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/orders/utils.js +0 -10
- package/dist/hooks/swap/prices/delta/orders/utils.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useBridgeInfo.js +0 -10
- package/dist/hooks/swap/prices/delta/queries/useBridgeInfo.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js +0 -10
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js +0 -10
- package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.js +0 -10
- package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/market/mutations/useBuildTx.js +0 -10
- package/dist/hooks/swap/prices/market/mutations/useBuildTx.js.map +1 -1
- package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.js +0 -10
- package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.js.map +1 -1
- package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js +0 -10
- package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js.map +1 -1
- package/dist/hooks/swap/prices/market/queries/useSpenderAndContracts.js +0 -10
- package/dist/hooks/swap/prices/market/queries/useSpenderAndContracts.js.map +1 -1
- package/dist/hooks/swap/prices/usePricesParams.js +0 -10
- package/dist/hooks/swap/prices/usePricesParams.js.map +1 -1
- package/dist/hooks/swap/prices/useSwapPrices.js +0 -11
- package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
- package/dist/hooks/swap/prices/useTokenInputsFromPrice.js +0 -10
- package/dist/hooks/swap/prices/useTokenInputsFromPrice.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/errors.js +0 -10
- package/dist/hooks/swap/tradeFlow/common/errors.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.js +2 -13
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js +2 -11
- package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketFlow.js +2 -13
- package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js +2 -11
- package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js.map +1 -1
- package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js +0 -10
- package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js.map +1 -1
- package/dist/hooks/tokens/allowance/useTokenAllowance.js +0 -10
- package/dist/hooks/tokens/allowance/useTokenAllowance.js.map +1 -1
- package/dist/hooks/tokens/balances/queries.js +0 -10
- package/dist/hooks/tokens/balances/queries.js.map +1 -1
- package/dist/hooks/tokens/balances/useAttachTokenBalanceMultichain.js +0 -10
- package/dist/hooks/tokens/balances/useAttachTokenBalanceMultichain.js.map +1 -1
- package/dist/hooks/tokens/balances/useInvalidateTokenData.js +0 -10
- package/dist/hooks/tokens/balances/useInvalidateTokenData.js.map +1 -1
- package/dist/hooks/tokens/balances/useIsInsufficientTokenBalance.js +0 -10
- package/dist/hooks/tokens/balances/useIsInsufficientTokenBalance.js.map +1 -1
- package/dist/hooks/tokens/balances/useMultichainTokenBalances.js +0 -10
- package/dist/hooks/tokens/balances/useMultichainTokenBalances.js.map +1 -1
- package/dist/hooks/tokens/balances/useTokenBalance.js +0 -10
- package/dist/hooks/tokens/balances/useTokenBalance.js.map +1 -1
- package/dist/hooks/tokens/prices/queries.js +0 -10
- package/dist/hooks/tokens/prices/queries.js.map +1 -1
- package/dist/hooks/tokens/prices/useMultichainTokenPrices.js +0 -10
- package/dist/hooks/tokens/prices/useMultichainTokenPrices.js.map +1 -1
- package/dist/hooks/tokens/prices/useTokenPrices.js +0 -10
- package/dist/hooks/tokens/prices/useTokenPrices.js.map +1 -1
- package/dist/hooks/tokens/useNativeToken.js +0 -10
- package/dist/hooks/tokens/useNativeToken.js.map +1 -1
- package/dist/hooks/tokens/useTokenLists.js +0 -10
- package/dist/hooks/tokens/useTokenLists.js.map +1 -1
- package/dist/hooks/tokens/useTokensByAddress.js +0 -10
- package/dist/hooks/tokens/useTokensByAddress.js.map +1 -1
- package/dist/hooks/tokens/useTokensFromAcross.js +0 -10
- package/dist/hooks/tokens/useTokensFromAcross.js.map +1 -1
- package/dist/hooks/txs/mutations/useApprove.js +0 -10
- package/dist/hooks/txs/mutations/useApprove.js.map +1 -1
- package/dist/hooks/txs/mutations/useDepositWeth.js +0 -10
- package/dist/hooks/txs/mutations/useDepositWeth.js.map +1 -1
- package/dist/hooks/txs/mutations/useSendTx.js +0 -10
- package/dist/hooks/txs/mutations/useSendTx.js.map +1 -1
- package/dist/hooks/txs/queries/useAwaitTx.js +0 -10
- package/dist/hooks/txs/queries/useAwaitTx.js.map +1 -1
- package/dist/hooks/useAvailableCrosses.js +0 -10
- package/dist/hooks/useAvailableCrosses.js.map +1 -1
- package/dist/hooks/useBridgeInfo.js +0 -10
- package/dist/hooks/useBridgeInfo.js.map +1 -1
- package/dist/hooks/useCurrentChain.js +0 -10
- package/dist/hooks/useCurrentChain.js.map +1 -1
- package/dist/hooks/useDebouncedInputState.js +0 -10
- package/dist/hooks/useDebouncedInputState.js.map +1 -1
- package/dist/hooks/useGlobalDeltaEnabled.js +0 -10
- package/dist/hooks/useGlobalDeltaEnabled.js.map +1 -1
- package/dist/hooks/useIsCrosschainPossible.js +0 -10
- package/dist/hooks/useIsCrosschainPossible.js.map +1 -1
- package/dist/hooks/useMinViemClient.js +0 -10
- package/dist/hooks/useMinViemClient.js.map +1 -1
- package/dist/hooks/useSDK.js +0 -10
- package/dist/hooks/useSDK.js.map +1 -1
- package/dist/hooks/useSlippage.js +0 -10
- package/dist/hooks/useSlippage.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -11
- package/dist/index.js.map +1 -1
- package/dist/lib/constants/delta.js +0 -10
- package/dist/lib/constants/delta.js.map +1 -1
- package/dist/lib/constants/index.js +0 -10
- package/dist/lib/constants/index.js.map +1 -1
- package/dist/lib/constants/time.js +0 -10
- package/dist/lib/constants/time.js.map +1 -1
- package/dist/lib/constants/weth.js +0 -10
- package/dist/lib/constants/weth.js.map +1 -1
- package/dist/lib/ipfs.js +0 -10
- package/dist/lib/ipfs.js.map +1 -1
- package/dist/lib/queryClient.js +0 -10
- package/dist/lib/queryClient.js.map +1 -1
- package/dist/lib/utils/delta.js +0 -10
- package/dist/lib/utils/delta.js.map +1 -1
- package/dist/lib/utils/dexes.js +0 -10
- package/dist/lib/utils/dexes.js.map +1 -1
- package/dist/lib/utils/explorer.js +0 -10
- package/dist/lib/utils/explorer.js.map +1 -1
- package/dist/lib/utils/fee.js +0 -10
- package/dist/lib/utils/fee.js.map +1 -1
- package/dist/lib/utils/formatFiatPrice.js +0 -10
- package/dist/lib/utils/formatFiatPrice.js.map +1 -1
- package/dist/lib/utils/formatTokenBalance.js +0 -10
- package/dist/lib/utils/formatTokenBalance.js.map +1 -1
- package/dist/lib/utils/index.js +0 -10
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/price.js +0 -10
- package/dist/lib/utils/price.js.map +1 -1
- package/dist/lib/utils/priceImpact.js +0 -10
- package/dist/lib/utils/priceImpact.js.map +1 -1
- package/dist/lib/utils/rate.js +0 -10
- package/dist/lib/utils/rate.js.map +1 -1
- package/dist/lib/utils/removeZeroDecimals.js +0 -10
- package/dist/lib/utils/removeZeroDecimals.js.map +1 -1
- package/dist/lib/utils/slippage.js +0 -10
- package/dist/lib/utils/slippage.js.map +1 -1
- package/dist/lib/utils/toDecimal.js +0 -10
- package/dist/lib/utils/toDecimal.js.map +1 -1
- package/dist/lib/utils/toasts.js +0 -10
- package/dist/lib/utils/toasts.js.map +1 -1
- package/dist/lib/web3/privy/config.js +1 -11
- package/dist/lib/web3/privy/config.js.map +1 -1
- package/dist/lib/web3/wagmi/config.js +1 -11
- package/dist/lib/web3/wagmi/config.js.map +1 -1
- package/dist/lib/web3/wagmi/constants.js +0 -10
- package/dist/lib/web3/wagmi/constants.js.map +1 -1
- package/dist/lib/web3/wagmi/transports.js +0 -10
- package/dist/lib/web3/wagmi/transports.js.map +1 -1
- package/dist/lib/web3/wagmi/utils.js +0 -10
- package/dist/lib/web3/wagmi/utils.js.map +1 -1
- package/dist/styles.css +5 -265
- package/dist/styles2.css +256 -0
- package/dist/test/TestButton.d.ts +2 -0
- package/dist/test/TestButton.d.ts.map +1 -0
- package/dist/test/connect/AccountDisplay.js +0 -10
- package/dist/test/connect/AccountDisplay.js.map +1 -1
- package/dist/test/connect/App.js +0 -10
- package/dist/test/connect/App.js.map +1 -1
- package/dist/test/connect/ConnectWallet.js +0 -10
- package/dist/test/connect/ConnectWallet.js.map +1 -1
- package/dist/test/connect/WagmiProfile.js +0 -10
- package/dist/test/connect/WagmiProfile.js.map +1 -1
- package/dist/test/connect/WalletActions.js +0 -10
- package/dist/test/connect/WalletActions.js.map +1 -1
- package/dist/test/logger-demo.d.ts +5 -0
- package/dist/test/logger-demo.d.ts.map +1 -0
- package/dist/tokens/blacklist.js +0 -10
- package/dist/tokens/blacklist.js.map +1 -1
- package/dist/tokens/constants.js +0 -10
- package/dist/tokens/constants.js.map +1 -1
- package/dist/tokens/constructor.js +0 -10
- package/dist/tokens/constructor.js.map +1 -1
- package/dist/tokens/defaultTokens.js +0 -10
- package/dist/tokens/defaultTokens.js.map +1 -1
- package/dist/tokens/hooks.js +0 -10
- package/dist/tokens/hooks.js.map +1 -1
- package/dist/tokens/lists/constants.js +0 -10
- package/dist/tokens/lists/constants.js.map +1 -1
- package/dist/tokens/lists/download.js +0 -10
- package/dist/tokens/lists/download.js.map +1 -1
- package/dist/tokens/lists/hooks.js +0 -10
- package/dist/tokens/lists/hooks.js.map +1 -1
- package/dist/tokens/lists/state/observer.js +0 -10
- package/dist/tokens/lists/state/observer.js.map +1 -1
- package/dist/tokens/lists/state/tokenListsActionsAtom.js +2 -13
- package/dist/tokens/lists/state/tokenListsActionsAtom.js.map +1 -1
- package/dist/tokens/lists/state/tokenListsStateAtom.js +2 -14
- package/dist/tokens/lists/state/tokenListsStateAtom.js.map +1 -1
- package/dist/tokens/lists/utils.js +0 -10
- package/dist/tokens/lists/utils.js.map +1 -1
- package/dist/tokens/overrides.js +0 -10
- package/dist/tokens/overrides.js.map +1 -1
- package/dist/tokens/queries.js +0 -10
- package/dist/tokens/queries.js.map +1 -1
- package/dist/tokens/stabeCoins/hooks.js +0 -10
- package/dist/tokens/stabeCoins/hooks.js.map +1 -1
- package/dist/tokens/stabeCoins/index.js +0 -10
- package/dist/tokens/stabeCoins/index.js.map +1 -1
- package/dist/tokens/state/constructTokens.js +0 -10
- package/dist/tokens/state/constructTokens.js.map +1 -1
- package/dist/tokens/state/tokensAtom.js +2 -13
- package/dist/tokens/state/tokensAtom.js.map +1 -1
- package/dist/tokens/utils/areTokensSame.js +0 -10
- package/dist/tokens/utils/areTokensSame.js.map +1 -1
- package/dist/tokens/utils/eth.js +0 -10
- package/dist/tokens/utils/eth.js.map +1 -1
- package/dist/tokens/utils/filtering.js +0 -10
- package/dist/tokens/utils/filtering.js.map +1 -1
- package/dist/tokens/utils/sets.js +0 -10
- package/dist/tokens/utils/sets.js.map +1 -1
- package/dist/tokens/utils/sorting.js +0 -10
- package/dist/tokens/utils/sorting.js.map +1 -1
- package/dist/widget/DevTools.d.ts +2 -0
- package/dist/widget/DevTools.d.ts.map +1 -0
- package/dist/widget/DevTools.js +24 -0
- package/dist/widget/DevTools.js.map +1 -0
- package/dist/widget/Updaters.js +0 -10
- package/dist/widget/Updaters.js.map +1 -1
- package/dist/widget/across/utils.js +0 -10
- package/dist/widget/across/utils.js.map +1 -1
- package/dist/widget/button/hooks/useWidgetButtonExtraProps.js +0 -10
- package/dist/widget/button/hooks/useWidgetButtonExtraProps.js.map +1 -1
- package/dist/widget/constants.js +0 -10
- package/dist/widget/constants.js.map +1 -1
- package/dist/widget/index.d.ts.map +1 -1
- package/dist/widget/index.js +34 -28
- package/dist/widget/index.js.map +1 -1
- package/dist/widget/inputs/hooks/useTokenFromInputProps.js +0 -11
- package/dist/widget/inputs/hooks/useTokenFromInputProps.js.map +1 -1
- package/dist/widget/inputs/hooks/useTokenSwitcherProps.js +0 -10
- package/dist/widget/inputs/hooks/useTokenSwitcherProps.js.map +1 -1
- package/dist/widget/inputs/hooks/useTokenToInputProps.js +0 -10
- package/dist/widget/inputs/hooks/useTokenToInputProps.js.map +1 -1
- package/dist/widget/inputs/state/inputAmountAtom.js +6 -20
- package/dist/widget/inputs/state/inputAmountAtom.js.map +1 -1
- package/dist/widget/inputs/state/selectedTokenActionsAtom.js +6 -19
- package/dist/widget/inputs/state/selectedTokenActionsAtom.js.map +1 -1
- package/dist/widget/inputs/state/selectedTokenAtom.js +2 -15
- package/dist/widget/inputs/state/selectedTokenAtom.js.map +1 -1
- package/dist/widget/inputs/state/subscriptions.js +0 -10
- package/dist/widget/inputs/state/subscriptions.js.map +1 -1
- package/dist/widget/state/chainToAtom.js +2 -13
- package/dist/widget/state/chainToAtom.js.map +1 -1
- package/dist/widget/state/configActionsAtom.js +2 -13
- package/dist/widget/state/configActionsAtom.js.map +1 -1
- package/dist/widget/state/configAtom.js +1 -12
- package/dist/widget/state/configAtom.js.map +1 -1
- package/dist/widget/state/containerAtom.js +1 -12
- package/dist/widget/state/containerAtom.js.map +1 -1
- package/dist/widget/state/currentSwapInputAtom.js +1 -12
- package/dist/widget/state/currentSwapInputAtom.js.map +1 -1
- package/dist/widget/state/isCrosschainAtom.js +2 -13
- package/dist/widget/state/isCrosschainAtom.js.map +1 -1
- package/dist/widget/subscriptions.js +0 -10
- package/dist/widget/subscriptions.js.map +1 -1
- package/dist/widget/swapDetails/fees.js +0 -10
- package/dist/widget/swapDetails/fees.js.map +1 -1
- package/dist/widget/swapDetails/orderRouting.js +0 -10
- package/dist/widget/swapDetails/orderRouting.js.map +1 -1
- package/dist/widget/swapDetails/priceImpact.js +0 -10
- package/dist/widget/swapDetails/priceImpact.js.map +1 -1
- package/dist/widget/swapDetails/useSwapDetailsListProps.js +0 -10
- package/dist/widget/swapDetails/useSwapDetailsListProps.js.map +1 -1
- package/dist/widget/swapDetails/youGet.js +0 -10
- package/dist/widget/swapDetails/youGet.js.map +1 -1
- package/package.json +2 -1
- package/dist/components/widget/SwapModeSwitcher/state/types.js +0 -11
- package/dist/components/widget/SwapModeSwitcher/state/types.js.map +0 -1
- package/dist/components/widget/TokenBadge/types.js +0 -11
- package/dist/components/widget/TokenBadge/types.js.map +0 -1
- package/dist/hooks/txs/index.js +0 -13
- package/dist/hooks/txs/index.js.map +0 -1
- package/dist/lib/utils/logger.js +0 -11
- package/dist/lib/utils/logger.js.map +0 -1
- package/dist/tokens/state/types.js +0 -11
- package/dist/tokens/state/types.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.js","sources":["../../../../src/hooks/permit/utils/abi.ts"],"sourcesContent":["export const EIP_2612_PERMIT_ABI = [\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"PERMIT_TYPEHASH\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"nonces\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"deadline\", type: \"uint256\" },\n { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n] as const;\n\nexport const EIP_2612_PERMIT_NONSTANDARD_ABI = [\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"deadline\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"permit\", // non-standard\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const DAI_PERMIT_ABI = [\n {\n constant: false,\n inputs: [\n { internalType: \"address\", name: \"holder\", type: \"address\" },\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"nonce\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"expiry\", type: \"uint256\" },\n { internalType: \"bool\", name: \"allowed\", type: \"bool\" },\n { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" },\n ],\n name: \"permit\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const UPGRADABLE_ERC_20_ABI = [\n {\n inputs: [],\n name: \"implementation\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n"],"names":["EIP_2612_PERMIT_ABI","inputs","name","outputs","internalType","type","stateMutability","DAI_PERMIT_ABI","constant","payable","UPGRADABLE_ERC_20_ABI"],"mappings":"
|
|
1
|
+
{"version":3,"file":"abi.js","sources":["../../../../src/hooks/permit/utils/abi.ts"],"sourcesContent":["export const EIP_2612_PERMIT_ABI = [\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"PERMIT_TYPEHASH\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"nonces\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"deadline\", type: \"uint256\" },\n { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n] as const;\n\nexport const EIP_2612_PERMIT_NONSTANDARD_ABI = [\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"deadline\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"permit\", // non-standard\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const DAI_PERMIT_ABI = [\n {\n constant: false,\n inputs: [\n { internalType: \"address\", name: \"holder\", type: \"address\" },\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"nonce\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"expiry\", type: \"uint256\" },\n { internalType: \"bool\", name: \"allowed\", type: \"bool\" },\n { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" },\n ],\n name: \"permit\",\n outputs: [],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const UPGRADABLE_ERC_20_ABI = [\n {\n inputs: [],\n name: \"implementation\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n"],"names":["EIP_2612_PERMIT_ABI","inputs","name","outputs","internalType","type","stateMutability","DAI_PERMIT_ABI","constant","payable","UPGRADABLE_ERC_20_ABI"],"mappings":"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"}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || {
|
|
2
|
-
cache: /* @__PURE__ */ new Map(),
|
|
3
|
-
get(name, inst) {
|
|
4
|
-
if (this.cache.has(name)) {
|
|
5
|
-
return this.cache.get(name);
|
|
6
|
-
}
|
|
7
|
-
this.cache.set(name, inst);
|
|
8
|
-
return inst;
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
1
|
const EIP712_DOMAIN_TYPEHASH_WITHOUT_VERSION = "0x8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866";
|
|
12
2
|
const DOMAIN_HASHES_WITHOUT_VERSION = [
|
|
13
3
|
/** @signature 'EIP712Domain(string name,uint chainId,address verifyingContract)' */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../src/hooks/permit/utils/constants.ts"],"sourcesContent":["import type { Address } from \"viem\";\n\nexport const EIP_2612_PERMIT_SELECTOR = \"0xd505accf\";\nexport const DAI_PERMIT_SELECTOR = \"0x8fcbaf0c\";\n\nexport const EIP712_DOMAIN_TYPEHASH_WITHOUT_VERSION =\n \"0x8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866\";\n\nexport const DOMAIN_HASHES_WITHOUT_VERSION: Address[] = [\n /** @signature 'EIP712Domain(string name,uint chainId,address verifyingContract)' */\n \"0x797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f35\",\n /** @signature 'EIP712Domain(string name,uint256 chainId,address verifyingContract)' */\n EIP712_DOMAIN_TYPEHASH_WITHOUT_VERSION, // Uniswap's UNI\n];\n\n/**\n * @signature EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\n * */\nexport const DOMAIN_HASH_WITH_SALT_AND_WITHOUT_CHAIN_ID = // USDC.e uses this\n \"0x36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab7\";\n\n/**\n * @signature Permit(address holder,address spender,uint256 nonce,uint256 expiry,bool allowed)\n * */\nexport const DAI_LIKE_PERMIT_TYPEHASH =\n \"0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb\";\n\n/**\n * @signature Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\n * */\nexport const EIP2612_PERMIT_TYPEHASH =\n \"0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9\";\n\n/**\n * @example `${tokenAddress}:${chainId}.toLowerCase()`\n * @warning Only toLowerCase string\n * */\nexport const TOKEN_ADDRESSES_WITH_SALT = [\n // this is our USDC.e that gives us so much trouble\n \"0x2791bca1f2de4661ed88a30c99a7a9449aa84174:137\", // USDC Proxy Polygon\n \"0x8f3cf7ad23cd3cadbd9735aff958023239c6a063:137\", // DAI Proxy Polygon\n] as const;\n\nexport const ERC_20_NONCES_ABI = [\n {\n constant: true,\n inputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"_nonces\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"nonce\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"getNonce\", // dai polygon\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const DOMAIN_TYPEHASH_ABI = [\n {\n constant: true,\n inputs: [],\n name: \"DOMAIN_TYPEHASH\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const PERMIT_TYPEHASH_ABI = [\n {\n constant: true,\n inputs: [],\n name: \"PERMIT_TYPEHASH\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const VERSIONS_ABI = [\n {\n constant: true,\n inputs: [],\n name: \"version\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"ERC712_VERSION\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"EIP712_VERSION\", // in USDC.e\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const EIP712_DOMAIN_ABI = [\n {\n name: \"eip712Domain\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [\n {\n type: \"bytes1\",\n name: \"fields\",\n },\n {\n type: \"string\",\n name: \"name\",\n },\n {\n type: \"string\",\n name: \"version\",\n },\n {\n type: \"uint256\",\n name: \"chainId\",\n },\n {\n type: \"address\",\n name: \"verifyingContract\",\n },\n {\n type: \"bytes32\",\n name: \"salt\",\n },\n {\n type: \"uint256[]\",\n name: \"extensions\",\n },\n ],\n },\n] as const;\n\nexport const DOMAIN_ABIS = {\n versionAndChain: [\n // Lido stETH on mainnet\n {\n name: \"eip712Domain\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [\n {\n type: \"string\",\n name: \"name\",\n },\n {\n type: \"string\",\n name: \"version\",\n },\n {\n type: \"uint256\",\n name: \"chainId\",\n },\n {\n type: \"address\",\n name: \"verifyingContract\",\n },\n ],\n },\n ],\n versionAndSalt: [\n {\n name: \"eip712Domain\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [\n {\n type: \"string\",\n name: \"name\",\n },\n {\n type: \"string\",\n name: \"version\",\n },\n {\n type: \"address\",\n name: \"verifyingContract\",\n },\n {\n type: \"bytes32\",\n name: \"salt\",\n },\n ],\n },\n ],\n withoutVersion: [\n {\n name: \"eip712Domain\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [\n {\n type: \"string\",\n name: \"name\",\n },\n {\n type: \"uint256\",\n name: \"chainId\",\n },\n {\n type: \"address\",\n name: \"verifyingContract\",\n },\n ],\n },\n ],\n} as const;\n"],"names":["EIP712_DOMAIN_TYPEHASH_WITHOUT_VERSION","DOMAIN_HASHES_WITHOUT_VERSION","DAI_LIKE_PERMIT_TYPEHASH","EIP2612_PERMIT_TYPEHASH","ERC_20_NONCES_ABI","constant","inputs","name","type","outputs","payable","stateMutability","DOMAIN_TYPEHASH_ABI","internalType","PERMIT_TYPEHASH_ABI","VERSIONS_ABI","EIP712_DOMAIN_ABI","DOMAIN_ABIS","versionAndChain","versionAndSalt","withoutVersion"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../src/hooks/permit/utils/constants.ts"],"sourcesContent":["import type { Address } from \"viem\";\n\nexport const EIP_2612_PERMIT_SELECTOR = \"0xd505accf\";\nexport const DAI_PERMIT_SELECTOR = \"0x8fcbaf0c\";\n\nexport const EIP712_DOMAIN_TYPEHASH_WITHOUT_VERSION =\n \"0x8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866\";\n\nexport const DOMAIN_HASHES_WITHOUT_VERSION: Address[] = [\n /** @signature 'EIP712Domain(string name,uint chainId,address verifyingContract)' */\n \"0x797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f35\",\n /** @signature 'EIP712Domain(string name,uint256 chainId,address verifyingContract)' */\n EIP712_DOMAIN_TYPEHASH_WITHOUT_VERSION, // Uniswap's UNI\n];\n\n/**\n * @signature EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\n * */\nexport const DOMAIN_HASH_WITH_SALT_AND_WITHOUT_CHAIN_ID = // USDC.e uses this\n \"0x36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab7\";\n\n/**\n * @signature Permit(address holder,address spender,uint256 nonce,uint256 expiry,bool allowed)\n * */\nexport const DAI_LIKE_PERMIT_TYPEHASH =\n \"0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb\";\n\n/**\n * @signature Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\n * */\nexport const EIP2612_PERMIT_TYPEHASH =\n \"0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9\";\n\n/**\n * @example `${tokenAddress}:${chainId}.toLowerCase()`\n * @warning Only toLowerCase string\n * */\nexport const TOKEN_ADDRESSES_WITH_SALT = [\n // this is our USDC.e that gives us so much trouble\n \"0x2791bca1f2de4661ed88a30c99a7a9449aa84174:137\", // USDC Proxy Polygon\n \"0x8f3cf7ad23cd3cadbd9735aff958023239c6a063:137\", // DAI Proxy Polygon\n] as const;\n\nexport const ERC_20_NONCES_ABI = [\n {\n constant: true,\n inputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"_nonces\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"nonce\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"getNonce\", // dai polygon\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const DOMAIN_TYPEHASH_ABI = [\n {\n constant: true,\n inputs: [],\n name: \"DOMAIN_TYPEHASH\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const PERMIT_TYPEHASH_ABI = [\n {\n constant: true,\n inputs: [],\n name: \"PERMIT_TYPEHASH\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const VERSIONS_ABI = [\n {\n constant: true,\n inputs: [],\n name: \"version\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"ERC712_VERSION\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"EIP712_VERSION\", // in USDC.e\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const EIP712_DOMAIN_ABI = [\n {\n name: \"eip712Domain\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [\n {\n type: \"bytes1\",\n name: \"fields\",\n },\n {\n type: \"string\",\n name: \"name\",\n },\n {\n type: \"string\",\n name: \"version\",\n },\n {\n type: \"uint256\",\n name: \"chainId\",\n },\n {\n type: \"address\",\n name: \"verifyingContract\",\n },\n {\n type: \"bytes32\",\n name: \"salt\",\n },\n {\n type: \"uint256[]\",\n name: \"extensions\",\n },\n ],\n },\n] as const;\n\nexport const DOMAIN_ABIS = {\n versionAndChain: [\n // Lido stETH on mainnet\n {\n name: \"eip712Domain\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [\n {\n type: \"string\",\n name: \"name\",\n },\n {\n type: \"string\",\n name: \"version\",\n },\n {\n type: \"uint256\",\n name: \"chainId\",\n },\n {\n type: \"address\",\n name: \"verifyingContract\",\n },\n ],\n },\n ],\n versionAndSalt: [\n {\n name: \"eip712Domain\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [\n {\n type: \"string\",\n name: \"name\",\n },\n {\n type: \"string\",\n name: \"version\",\n },\n {\n type: \"address\",\n name: \"verifyingContract\",\n },\n {\n type: \"bytes32\",\n name: \"salt\",\n },\n ],\n },\n ],\n withoutVersion: [\n {\n name: \"eip712Domain\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [\n {\n type: \"string\",\n name: \"name\",\n },\n {\n type: \"uint256\",\n name: \"chainId\",\n },\n {\n type: \"address\",\n name: \"verifyingContract\",\n },\n ],\n },\n ],\n} as const;\n"],"names":["EIP712_DOMAIN_TYPEHASH_WITHOUT_VERSION","DOMAIN_HASHES_WITHOUT_VERSION","DAI_LIKE_PERMIT_TYPEHASH","EIP2612_PERMIT_TYPEHASH","ERC_20_NONCES_ABI","constant","inputs","name","type","outputs","payable","stateMutability","DOMAIN_TYPEHASH_ABI","internalType","PERMIT_TYPEHASH_ABI","VERSIONS_ABI","EIP712_DOMAIN_ABI","DOMAIN_ABIS","versionAndChain","versionAndSalt","withoutVersion"],"mappings":"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"}
|
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
import 'viem';
|
|
2
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
3
|
const PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
14
4
|
const PERMIT2_DOMAIN_NAME = "Permit2";
|
|
15
5
|
const PERMIT2_TOKEN_PERMISSIONS = [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"construct.js","sources":["../../../../src/hooks/permit/utils/construct.ts"],"sourcesContent":["import { type PermitSupportDAI, type PermitSupportEIP2612 } from \"./detect\";\nimport { type Address, type Hex } from \"viem\";\n\nconst PERMIT2_ADDRESS = \"0x000000000022D473030F116dDEE9F6B43aC78BA3\" as const;\nconst PERMIT2_DOMAIN_NAME = \"Permit2\" as const;\n\nconst PERMIT2_TOKEN_PERMISSIONS = [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n] as const;\n\nconst PERMIT2_TRANSFER_FROM_TYPES = {\n PermitTransferFrom: [\n { name: \"permitted\", type: \"TokenPermissions\" },\n { name: \"spender\", type: \"address\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n TokenPermissions: PERMIT2_TOKEN_PERMISSIONS,\n} as const;\n\nconst PERMIT2_PERMIT_DETAILS = [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint160\" },\n { name: \"expiration\", type: \"uint48\" },\n { name: \"nonce\", type: \"uint48\" },\n] as const;\n\nconst PERMIT2_PERMIT_SINGLE_TYPES = {\n PermitSingle: [\n { name: \"details\", type: \"PermitDetails\" },\n { name: \"spender\", type: \"address\" },\n { name: \"sigDeadline\", type: \"uint256\" },\n ],\n PermitDetails: PERMIT2_PERMIT_DETAILS,\n} as const;\n\nexport interface Permit1PermitInput {\n type: \"permit1\";\n permitInfo: PermitSupportEIP2612;\n owner: Address;\n spender: Address;\n value: bigint;\n nonce: bigint;\n deadline: bigint;\n}\n\nexport interface DaiPermitInput {\n type: \"dai\";\n permitInfo: PermitSupportDAI;\n holder: Address;\n spender: Address;\n nonce: bigint;\n expiry: bigint;\n allowed: boolean;\n}\n\nexport interface Permit2Input {\n type: \"permit2\";\n variant: \"single\" | \"transferFrom\";\n permitInfo?: undefined;\n token: Address;\n spender: Address;\n nonce: bigint;\n amount: bigint;\n expiration: bigint;\n chainId: number;\n}\n\nexport type PermitTypedDataInput =\n | Permit1PermitInput\n | DaiPermitInput\n | Permit2Input;\n\n// EIP-712 Type Definitions\ninterface EIP712Type {\n name: string;\n type: string;\n}\n\ninterface EIP712Domain {\n name: string;\n version?: string;\n chainId?: number;\n verifyingContract: Address;\n salt?: Hex;\n}\n\n// Return type for Permit2\ninterface Permit2TypedDataSingle {\n types: typeof PERMIT2_PERMIT_SINGLE_TYPES & {\n // EIP712Domain: EIP712Type[];\n };\n primaryType: \"PermitSingle\";\n domain: {\n name: typeof PERMIT2_DOMAIN_NAME;\n chainId?: number;\n verifyingContract: typeof PERMIT2_ADDRESS;\n };\n message: {\n details: {\n token: Address;\n amount: bigint;\n nonce: bigint;\n expiration: bigint;\n };\n spender: Address;\n sigDeadline: bigint;\n };\n}\ninterface Permit2TypedDataTransferFrom {\n types: typeof PERMIT2_TRANSFER_FROM_TYPES & {\n // EIP712Domain: EIP712Type[];\n };\n primaryType: \"PermitTransferFrom\";\n domain: {\n name: typeof PERMIT2_DOMAIN_NAME;\n chainId?: number;\n verifyingContract: typeof PERMIT2_ADDRESS;\n };\n message: {\n permitted: {\n token: Address;\n amount: bigint;\n };\n spender: Address;\n nonce: bigint;\n deadline: bigint;\n };\n}\n\n// Return type for Permit1 Permit\ninterface Permit1PermitTypedData {\n types: {\n // EIP712Domain: EIP712Type[];\n Permit: EIP712Type[];\n };\n primaryType: \"Permit\";\n domain: EIP712Domain;\n message: {\n owner: Address;\n spender: Address;\n value: bigint;\n nonce: bigint;\n deadline: bigint;\n };\n}\n\n// Return type for DAI Permit\ninterface DaiPermitTypedData {\n types: {\n // EIP712Domain: EIP712Type[];\n Permit: EIP712Type[];\n };\n primaryType: \"Permit\";\n domain: EIP712Domain;\n message: {\n holder: Address;\n spender: Address;\n nonce: bigint;\n expiry: bigint;\n allowed: boolean;\n };\n}\n\n// Union type for all possible return types\nexport type PermitTypedDataReturn =\n | Permit2TypedDataSingle\n | Permit2TypedDataTransferFrom\n | Permit1PermitTypedData\n | DaiPermitTypedData;\n\nexport function constructPermitTypedData(\n input: PermitTypedDataInput\n): PermitTypedDataReturn {\n if (input.type === \"permit2\") {\n const { token, spender, nonce, amount, expiration, variant, chainId } =\n input;\n\n if (variant === \"single\") {\n return {\n types: {\n ...PERMIT2_PERMIT_SINGLE_TYPES,\n // EIP712Domain: [\n // { name: \"name\", type: \"string\" },\n // { name: \"chainId\", type: \"uint256\" },\n // { name: \"verifyingContract\", type: \"address\" },\n // ],\n },\n primaryType: \"PermitSingle\",\n domain: {\n name: PERMIT2_DOMAIN_NAME,\n chainId,\n verifyingContract: PERMIT2_ADDRESS, // Uniswap Permit2\n },\n message: {\n details: { token, amount, nonce, expiration },\n spender,\n sigDeadline: expiration,\n },\n };\n }\n\n if (variant === \"transferFrom\") {\n return {\n types: {\n ...PERMIT2_TRANSFER_FROM_TYPES,\n // EIP712Domain: [\n // { name: \"name\", type: \"string\" },\n // { name: \"chainId\", type: \"uint256\" },\n // { name: \"verifyingContract\", type: \"address\" },\n // ],\n },\n primaryType: \"PermitTransferFrom\",\n domain: {\n name: PERMIT2_DOMAIN_NAME,\n chainId,\n verifyingContract: PERMIT2_ADDRESS, // Uniswap Permit2\n },\n message: {\n permitted: {\n token,\n amount,\n },\n spender,\n nonce,\n deadline: expiration,\n },\n };\n }\n }\n\n if (input.type === \"permit1\") {\n const { owner, spender, value, nonce, deadline, permitInfo } = input;\n return {\n types: {\n // EIP712Domain: [\n // { name: \"name\", type: \"string\" },\n // { name: \"version\", type: \"string\" },\n // { name: \"chainId\", type: \"uint256\" },\n // { name: \"verifyingContract\", type: \"address\" },\n // ],\n Permit: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n },\n primaryType: \"Permit\",\n domain: permitInfo.domain,\n message: { owner, spender, value, nonce, deadline },\n };\n }\n\n if (input.type === \"dai\") {\n const { holder, spender, nonce, expiry, allowed, permitInfo } = input;\n\n return {\n types: {\n // EIP712Domain: [\n // { name: \"name\", type: \"string\" },\n // { name: \"version\", type: \"string\" },\n // { name: \"chainId\", type: \"uint256\" },\n // { name: \"verifyingContract\", type: \"address\" },\n // ],\n Permit: [\n { name: \"holder\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"expiry\", type: \"uint256\" },\n { name: \"allowed\", type: \"bool\" },\n ],\n },\n primaryType: \"Permit\",\n domain: permitInfo.domain,\n message: { holder, spender, nonce, expiry, allowed },\n };\n }\n\n throw new Error(`Unsupported permit input type`);\n}\n\n// Example usage:\n// constructPermitTypedData({ type: 'permit1', variant: 'transfer', permitInfo, to, value, nonce, deadline });\n"],"names":["PERMIT2_ADDRESS","PERMIT2_DOMAIN_NAME","PERMIT2_TOKEN_PERMISSIONS","name","type","PERMIT2_TRANSFER_FROM_TYPES","PermitTransferFrom","TokenPermissions","PERMIT2_PERMIT_DETAILS","PERMIT2_PERMIT_SINGLE_TYPES","PermitSingle","PermitDetails","constructPermitTypedData","input","token","spender","nonce","amount","expiration","variant","chainId","types","primaryType","domain","verifyingContract","message","details","sigDeadline","permitted","deadline","owner","value","permitInfo","Permit","holder","expiry","allowed","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"construct.js","sources":["../../../../src/hooks/permit/utils/construct.ts"],"sourcesContent":["import { type PermitSupportDAI, type PermitSupportEIP2612 } from \"./detect\";\nimport { type Address, type Hex } from \"viem\";\n\nconst PERMIT2_ADDRESS = \"0x000000000022D473030F116dDEE9F6B43aC78BA3\" as const;\nconst PERMIT2_DOMAIN_NAME = \"Permit2\" as const;\n\nconst PERMIT2_TOKEN_PERMISSIONS = [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n] as const;\n\nconst PERMIT2_TRANSFER_FROM_TYPES = {\n PermitTransferFrom: [\n { name: \"permitted\", type: \"TokenPermissions\" },\n { name: \"spender\", type: \"address\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n TokenPermissions: PERMIT2_TOKEN_PERMISSIONS,\n} as const;\n\nconst PERMIT2_PERMIT_DETAILS = [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint160\" },\n { name: \"expiration\", type: \"uint48\" },\n { name: \"nonce\", type: \"uint48\" },\n] as const;\n\nconst PERMIT2_PERMIT_SINGLE_TYPES = {\n PermitSingle: [\n { name: \"details\", type: \"PermitDetails\" },\n { name: \"spender\", type: \"address\" },\n { name: \"sigDeadline\", type: \"uint256\" },\n ],\n PermitDetails: PERMIT2_PERMIT_DETAILS,\n} as const;\n\nexport interface Permit1PermitInput {\n type: \"permit1\";\n permitInfo: PermitSupportEIP2612;\n owner: Address;\n spender: Address;\n value: bigint;\n nonce: bigint;\n deadline: bigint;\n}\n\nexport interface DaiPermitInput {\n type: \"dai\";\n permitInfo: PermitSupportDAI;\n holder: Address;\n spender: Address;\n nonce: bigint;\n expiry: bigint;\n allowed: boolean;\n}\n\nexport interface Permit2Input {\n type: \"permit2\";\n variant: \"single\" | \"transferFrom\";\n permitInfo?: undefined;\n token: Address;\n spender: Address;\n nonce: bigint;\n amount: bigint;\n expiration: bigint;\n chainId: number;\n}\n\nexport type PermitTypedDataInput =\n | Permit1PermitInput\n | DaiPermitInput\n | Permit2Input;\n\n// EIP-712 Type Definitions\ninterface EIP712Type {\n name: string;\n type: string;\n}\n\ninterface EIP712Domain {\n name: string;\n version?: string;\n chainId?: number;\n verifyingContract: Address;\n salt?: Hex;\n}\n\n// Return type for Permit2\ninterface Permit2TypedDataSingle {\n types: typeof PERMIT2_PERMIT_SINGLE_TYPES & {\n // EIP712Domain: EIP712Type[];\n };\n primaryType: \"PermitSingle\";\n domain: {\n name: typeof PERMIT2_DOMAIN_NAME;\n chainId?: number;\n verifyingContract: typeof PERMIT2_ADDRESS;\n };\n message: {\n details: {\n token: Address;\n amount: bigint;\n nonce: bigint;\n expiration: bigint;\n };\n spender: Address;\n sigDeadline: bigint;\n };\n}\ninterface Permit2TypedDataTransferFrom {\n types: typeof PERMIT2_TRANSFER_FROM_TYPES & {\n // EIP712Domain: EIP712Type[];\n };\n primaryType: \"PermitTransferFrom\";\n domain: {\n name: typeof PERMIT2_DOMAIN_NAME;\n chainId?: number;\n verifyingContract: typeof PERMIT2_ADDRESS;\n };\n message: {\n permitted: {\n token: Address;\n amount: bigint;\n };\n spender: Address;\n nonce: bigint;\n deadline: bigint;\n };\n}\n\n// Return type for Permit1 Permit\ninterface Permit1PermitTypedData {\n types: {\n // EIP712Domain: EIP712Type[];\n Permit: EIP712Type[];\n };\n primaryType: \"Permit\";\n domain: EIP712Domain;\n message: {\n owner: Address;\n spender: Address;\n value: bigint;\n nonce: bigint;\n deadline: bigint;\n };\n}\n\n// Return type for DAI Permit\ninterface DaiPermitTypedData {\n types: {\n // EIP712Domain: EIP712Type[];\n Permit: EIP712Type[];\n };\n primaryType: \"Permit\";\n domain: EIP712Domain;\n message: {\n holder: Address;\n spender: Address;\n nonce: bigint;\n expiry: bigint;\n allowed: boolean;\n };\n}\n\n// Union type for all possible return types\nexport type PermitTypedDataReturn =\n | Permit2TypedDataSingle\n | Permit2TypedDataTransferFrom\n | Permit1PermitTypedData\n | DaiPermitTypedData;\n\nexport function constructPermitTypedData(\n input: PermitTypedDataInput\n): PermitTypedDataReturn {\n if (input.type === \"permit2\") {\n const { token, spender, nonce, amount, expiration, variant, chainId } =\n input;\n\n if (variant === \"single\") {\n return {\n types: {\n ...PERMIT2_PERMIT_SINGLE_TYPES,\n // EIP712Domain: [\n // { name: \"name\", type: \"string\" },\n // { name: \"chainId\", type: \"uint256\" },\n // { name: \"verifyingContract\", type: \"address\" },\n // ],\n },\n primaryType: \"PermitSingle\",\n domain: {\n name: PERMIT2_DOMAIN_NAME,\n chainId,\n verifyingContract: PERMIT2_ADDRESS, // Uniswap Permit2\n },\n message: {\n details: { token, amount, nonce, expiration },\n spender,\n sigDeadline: expiration,\n },\n };\n }\n\n if (variant === \"transferFrom\") {\n return {\n types: {\n ...PERMIT2_TRANSFER_FROM_TYPES,\n // EIP712Domain: [\n // { name: \"name\", type: \"string\" },\n // { name: \"chainId\", type: \"uint256\" },\n // { name: \"verifyingContract\", type: \"address\" },\n // ],\n },\n primaryType: \"PermitTransferFrom\",\n domain: {\n name: PERMIT2_DOMAIN_NAME,\n chainId,\n verifyingContract: PERMIT2_ADDRESS, // Uniswap Permit2\n },\n message: {\n permitted: {\n token,\n amount,\n },\n spender,\n nonce,\n deadline: expiration,\n },\n };\n }\n }\n\n if (input.type === \"permit1\") {\n const { owner, spender, value, nonce, deadline, permitInfo } = input;\n return {\n types: {\n // EIP712Domain: [\n // { name: \"name\", type: \"string\" },\n // { name: \"version\", type: \"string\" },\n // { name: \"chainId\", type: \"uint256\" },\n // { name: \"verifyingContract\", type: \"address\" },\n // ],\n Permit: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n },\n primaryType: \"Permit\",\n domain: permitInfo.domain,\n message: { owner, spender, value, nonce, deadline },\n };\n }\n\n if (input.type === \"dai\") {\n const { holder, spender, nonce, expiry, allowed, permitInfo } = input;\n\n return {\n types: {\n // EIP712Domain: [\n // { name: \"name\", type: \"string\" },\n // { name: \"version\", type: \"string\" },\n // { name: \"chainId\", type: \"uint256\" },\n // { name: \"verifyingContract\", type: \"address\" },\n // ],\n Permit: [\n { name: \"holder\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"expiry\", type: \"uint256\" },\n { name: \"allowed\", type: \"bool\" },\n ],\n },\n primaryType: \"Permit\",\n domain: permitInfo.domain,\n message: { holder, spender, nonce, expiry, allowed },\n };\n }\n\n throw new Error(`Unsupported permit input type`);\n}\n\n// Example usage:\n// constructPermitTypedData({ type: 'permit1', variant: 'transfer', permitInfo, to, value, nonce, deadline });\n"],"names":["PERMIT2_ADDRESS","PERMIT2_DOMAIN_NAME","PERMIT2_TOKEN_PERMISSIONS","name","type","PERMIT2_TRANSFER_FROM_TYPES","PermitTransferFrom","TokenPermissions","PERMIT2_PERMIT_DETAILS","PERMIT2_PERMIT_SINGLE_TYPES","PermitSingle","PermitDetails","constructPermitTypedData","input","token","spender","nonce","amount","expiration","variant","chainId","types","primaryType","domain","verifyingContract","message","details","sigDeadline","permitted","deadline","owner","value","permitInfo","Permit","holder","expiry","allowed","Error"],"mappings":"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"}
|
|
@@ -6,16 +6,6 @@ import { getDomainFromEIP712Domain } from './utils.js';
|
|
|
6
6
|
import { isETHaddress } from '../../../tokens/utils/eth.js';
|
|
7
7
|
import { guessDomainParams } from './domainSeparator.js';
|
|
8
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
9
|
const NotDetectedResult = {
|
|
20
10
|
type: "NOT_DETECTED",
|
|
21
11
|
domain: null
|
|
@@ -1 +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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"}
|
|
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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"}
|
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
import { toHex, domainSeparator } from 'viem';
|
|
2
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
3
|
function getDomainSeparatorVersionChain({
|
|
14
4
|
name,
|
|
15
5
|
version,
|
|
@@ -1 +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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"}
|
|
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":";;AAGO,SAASA,8BAAAA,CAA+B;AAAA,EAC7CC,IAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC;AAMF,CAAA,EAAQ;AAuBN,EAAA,OAAOC,eAAAA,CAAgB;AAAA,IACrBC,MAAAA,EAAQ;AAAA,MACNL,IAAAA;AAAAA,MACAC,OAAAA;AAAAA,MACAC,OAAAA;AAAAA,MACAC;AAAAA;AACF,GACD,CAAA;AACH;AAEO,SAASG,uBAAAA,CAAwB;AAAA,EACtCN,IAAAA;AAAAA,EACAE,OAAAA;AAAAA,EACAC;AAKF,CAAA,EAAQ;AACN,EAAA,OAAOC,eAAAA,CAAgB;AAAA,IACrBC,MAAAA,EAAQ;AAAA,MACNL,IAAAA;AAAAA,MACAE,OAAAA;AAAAA,MACAC;AAAAA;AACF,GACD,CAAA;AACH;AAEO,SAASI,6BAAAA,CAA8B;AAAA,EAC5CP,IAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAO,IAAAA;AAAAA,EACAL;AAMF,CAAA,EAAQ;AACN,EAAA,OAAOC,eAAAA,CAAgB;AAAA,IACrBC,MAAAA,EAAQ;AAAA,MACNL,IAAAA;AAAAA,MACAC,OAAAA;AAAAA,MACAE,iBAAAA;AAAAA,MACAK;AAAAA;AACF,GACD,CAAA;AACH;AAWA,SAASC,sBAAAA,CAAuB;AAAA,EAC9BD,IAAAA;AAAAA,EACAH,MAAAA;AAAAA,EACAH;AAC4B,CAAA,EAAQ;AACpC,EAAA,IAAIM,IAAAA,EAAM;AAcR,IAAA,MAAMJ,mBAAkBG,6BAAAA,CAA8B;AAAA,MACpDP,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,MACbC,OAAAA,EAASI,OAAOJ,OAAAA,IAAW,GAAA;AAAA;AAAA,MAC3BO,IAAAA;AAAAA,MACAL,mBAAmBE,MAAAA,CAAOF;AAAAA,KAC3B,CAAA;AAED,IAAA,OAAOC,gBAAAA;AAAAA;AAGT,EAAA,IAAIC,OAAOJ,OAAAA,EAAS;AAUlB,IAAA,MAAMG,mBAAkBL,8BAAAA,CAA+B;AAAA,MACrDC,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,MACbC,SAASI,MAAAA,CAAOJ,OAAAA;AAAAA;AAAAA,MAChBC,OAAAA,EAASQ,OAAOR,OAAO,CAAA;AAAA,MACvBC,mBAAmBE,MAAAA,CAAOF;AAAAA,KAC3B,CAAA;AAED,IAAA,OAAOC,gBAAAA;AAAAA;AAYT,EAAA,MAAMA,mBAAkBE,uBAAAA,CAAwB;AAAA,IAC9CN,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,IACbE,OAAAA,EAASQ,OAAOR,OAAO,CAAA;AAAA,IACvBC,mBAAmBE,MAAAA,CAAOF;AAAAA,GAC3B,CAAA;AAED,EAAA,OAAOC,gBAAAA;AACT;AA6BO,SAASO,iBAAAA,CAAkB;AAAA,EAChCN,MAAAA;AAAAA,EACAH,OAAAA;AAAAA,EACAE,eAAAA,EAAAA;AACwB,CAAA,EAA6B;AAErD,EAAA,IAAIC,OAAOJ,OAAAA,EAAS;AAClB,IAAA,MAAMW,2BAA0BH,sBAAAA,CAAuB;AAAA,MACrDJ,MAAAA,EAAQ;AAAA,QACNL,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,QACbC,SAASI,MAAAA,CAAOJ,OAAAA;AAAAA;AAAAA,QAChBE,mBAAmBE,MAAAA,CAAOF;AAAAA,OAC5B;AAAA,MACAD;AAAAA,KACD,CAAA;AAED,IAAA,IACEU,wBAAAA,CAAwBC,WAAAA,EAAY,KAAMT,gBAAAA,CAAgBS,aAAY,EACtE;AACA,MAAA,OAAO;AAAA,QACLZ,SAASI,MAAAA,CAAOJ,OAAAA;AAAAA,QAChBC;AAAAA,OACF;AAAA;AAIF,IAAA,MAAMM,KAAAA,GAAOM,MAAMZ,OAAAA,EAAS;AAAA,MAAEa,IAAAA,EAAM;AAAA,KAAI,CAAA;AAExC,IAAA,MAAMC,2BAA0BP,sBAAAA,CAAuB;AAAA,MACrDJ,MAAAA,EAAQ;AAAA,QACNL,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,QACbC,SAASI,MAAAA,CAAOJ,OAAAA;AAAAA,QAChBE,mBAAmBE,MAAAA,CAAOF;AAAAA,OAC5B;AAAA,MACAK,IAAAA,EAAAA,KAAAA;AAAAA,MACAN;AAAAA,KACD,CAAA;AAED,IAAA,IACEc,wBAAAA,CAAwBH,WAAAA,EAAY,KAAMT,gBAAAA,CAAgBS,aAAY,EACtE;AACA,MAAA,OAAO;AAAA,QACLZ,SAASI,MAAAA,CAAOJ,OAAAA;AAAAA,QAChBO,IAAAA,EAAAA;AAAAA,OACF;AAAA;AAIF,IAAA,OAAO;AAAA,MAAEN,OAAAA;AAAAA,MAASD,SAASI,MAAAA,CAAOJ;AAAAA,KAAQ;AAAA;AAG5C,EAAA,MAAMW,0BAA0BH,sBAAAA,CAAuB;AAAA,IACrDJ,MAAAA,EAAQ;AAAA,MACNL,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,MACbC,OAAAA,EAAS,GAAA;AAAA;AAAA,MACTE,mBAAmBE,MAAAA,CAAOF;AAAAA,KAC5B;AAAA,IACAD;AAAAA,GACD,CAAA;AAED,EAAA,IAAIU,uBAAAA,CAAwBC,WAAAA,EAAY,KAAMT,gBAAAA,CAAgBS,aAAY,EAAG;AAC3E,IAAA,OAAO;AAAA,MACLZ,OAAAA,EAAS,GAAA;AAAA,MACTC;AAAAA,KACF;AAAA;AAGF,EAAA,MAAMe,gCAAgCR,sBAAAA,CAAuB;AAAA;AAAA,IAE3DJ,MAAAA,EAAQ;AAAA,MAAEL,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,MAAMG,mBAAmBE,MAAAA,CAAOF;AAAAA,KAAkB;AAAA,IACzED;AAAAA,GACD,CAAA;AAED,EAAA,IACEe,6BAAAA,CAA8BJ,WAAAA,EAAY,KAC1CT,gBAAAA,CAAgBS,aAAY,EAC5B;AACA,IAAA,OAAO;AAAA,MACLX;AAAAA,KACF;AAAA;AAGF,EAAA,MAAMM,IAAAA,GAAOM,MAAMZ,OAAAA,EAAS;AAAA,IAAEa,IAAAA,EAAM;AAAA,GAAI,CAAA;AAExC,EAAA,MAAMC,0BAA0BP,sBAAAA,CAAuB;AAAA,IACrDJ,MAAAA,EAAQ;AAAA,MACNL,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,MACbC,OAAAA,EAAS,GAAA;AAAA,MACTE,mBAAmBE,MAAAA,CAAOF;AAAAA,KAC5B;AAAA,IACAK,IAAAA;AAAAA,IACAN;AAAAA,GACD,CAAA;AAED,EAAA,IAAIc,uBAAAA,CAAwBH,WAAAA,EAAY,KAAMT,gBAAAA,CAAgBS,aAAY,EAAG;AAC3E,IAAA,OAAO;AAAA,MACLZ,OAAAA,EAAS,GAAA;AAAA,MACTO;AAAAA,KACF;AAAA;AAGF,EAAA,MAAMU,oBAAoBT,sBAAAA,CAAuB;AAAA,IAC/CJ,MAAAA,EAAQ;AAAA,MACNL,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,MACbC,OAAAA,EAAS,GAAA;AAAA;AAAA;AAAA,MAETE,mBAAmBE,MAAAA,CAAOF;AAAAA,KAC5B;AAAA,IACAD;AAAAA,GACD,CAAA;AAED,EAAA,IAAIgB,iBAAAA,CAAkBL,WAAAA,EAAY,KAAMT,gBAAAA,CAAgBS,aAAY,EAAG;AACrE,IAAA,OAAO;AAAA,MACLZ,OAAAA,EAAS,GAAA;AAAA,MACTC;AAAAA,KACF;AAAA;AAGF,EAAA,MAAMiB,4BAA4BV,sBAAAA,CAAuB;AAAA,IACvDJ,MAAAA,EAAQ;AAAA,MACNL,MAAMK,MAAAA,CAAOL,IAAAA;AAAAA,MACbC,OAAAA,EAAS,GAAA;AAAA,MACTE,mBAAmBE,MAAAA,CAAOF;AAAAA,KAC5B;AAAA,IACAK,IAAAA;AAAAA;AAAAA,IACAN;AAAAA,GACD,CAAA;AAED,EAAA,IACEiB,yBAAAA,CAA0BN,WAAAA,EAAY,KAAMT,gBAAAA,CAAgBS,aAAY,EACxE;AACA,IAAA,OAAO;AAAA,MACLZ,OAAAA,EAAS,GAAA;AAAA,MACTO;AAAAA,KACF;AAAA;AAIF,EAAA,OAAO;AAAA,IAAEN;AAAAA,GAAQ;AACnB;;;;"}
|
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
import { parseSignature, encodeAbiParameters } from 'viem';
|
|
2
2
|
import { EIP_2612_PERMIT_ABI, DAI_PERMIT_ABI } from './abi.js';
|
|
3
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
4
|
const EIP_2612_PERMIT_PARAMETERS = EIP_2612_PERMIT_ABI.find((abiItem) => abiItem.name === "permit").inputs;
|
|
15
5
|
const DAI_PERMIT_PARAMETERS = DAI_PERMIT_ABI.find((abiItem) => abiItem.name === "permit").inputs;
|
|
16
6
|
function encodePermitMethodArgs(input) {
|
|
@@ -1 +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":"
|
|
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;;;;"}
|
|
@@ -5,16 +5,6 @@ import { constructPermitTypedData } from './construct.js';
|
|
|
5
5
|
import { ERC_20_NONCES_ABI } from './constants.js';
|
|
6
6
|
import { DAI_PERMIT_ABI, EIP_2612_PERMIT_ABI } from './abi.js';
|
|
7
7
|
|
|
8
|
-
globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || {
|
|
9
|
-
cache: /* @__PURE__ */ new Map(),
|
|
10
|
-
get(name, inst) {
|
|
11
|
-
if (this.cache.has(name)) {
|
|
12
|
-
return this.cache.get(name);
|
|
13
|
-
}
|
|
14
|
-
this.cache.set(name, inst);
|
|
15
|
-
return inst;
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
8
|
const randomAcc = privateKeyToAccount(generatePrivateKey());
|
|
19
9
|
const randomAccAddress = randomAcc.address;
|
|
20
10
|
const RANDOM_SPENDER_ADDRESS = "0x0000000000000000000000000000000000000123";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trySignPermit1.js","sources":["../../../../src/hooks/permit/utils/trySignPermit1.ts"],"sourcesContent":["import { type Config, readContracts } from \"@wagmi/core\";\nimport { type Hex, type Address, parseEther, parseSignature } from \"viem\";\nimport { generatePrivateKey, privateKeyToAccount } from \"viem/accounts\";\nimport {\n type NotDetectedPermitSupport,\n type PermitSupportResult,\n} from \"./detect\";\nimport { constructPermitTypedData } from \"./construct\";\nimport { ERC_20_NONCES_ABI } from \"./constants\";\nimport { DAI_PERMIT_ABI, EIP_2612_PERMIT_ABI } from \"./abi\";\nimport type { NonceMethod } from \"../hooks/usePermit1Nonce\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\n\nexport type TrySignPermitParams = {\n config: Config;\n permitInfo: PermitSupportResult | NotDetectedPermitSupport;\n tokenAddress: Address;\n spenderAddress?: Address;\n amount?: bigint;\n chainId: SupportedChainId;\n};\n\nexport type TrySignPermitSuccess = {\n tokenAddress: Address;\n chainId: SupportedChainId;\n permitInfo: PermitSupportResult;\n success: true;\n error: null;\n nonceBefore: bigint;\n nonceAfter: bigint;\n nonceMethod: NonceMethod;\n};\n\nexport type TrySignPermitFailure = {\n tokenAddress: Address;\n chainId: SupportedChainId;\n permitInfo: PermitSupportResult | NotDetectedPermitSupport;\n success: false;\n error: string;\n};\n\nexport type TrySignPermitResult = TrySignPermitSuccess | TrySignPermitFailure;\n\n// Create a random wallet for testing,\n// wallet starts with nonce=0 everywhere\nconst randomAcc = privateKeyToAccount(generatePrivateKey());\nconst randomAccAddress = randomAcc.address;\n\n// not ZERO_ADDRESS to avoid possible !=address(0) checks\nconst RANDOM_SPENDER_ADDRESS = \"0x0000000000000000000000000000000000000123\";\n\n/**\n * Ultimate check if signing a permit will succeed with detected permitInfo\n * Tests permit functionality by:\n * 1. Creating a random wallet\n * 2. Reading the wallet's nonce\n * 3. Signing permit data with the wallet\n * 4. Making a multicall with: [read nonce, permit(), read nonce]\n * 5. Verifying the nonce increased (indicating permit was processed)\n */\nexport async function trySignPermit1({\n config,\n chainId,\n permitInfo,\n tokenAddress,\n spenderAddress = RANDOM_SPENDER_ADDRESS,\n amount = parseEther(\"1\"),\n}: TrySignPermitParams): Promise<TrySignPermitResult> {\n if (permitInfo.type === \"NOT_DETECTED\") {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Permit not detected\",\n };\n }\n\n try {\n // Create a deadline 1 hour from now\n const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600);\n\n // Read nonce before permit\n const nonceBefore = await readNonce({\n config,\n tokenAddress,\n ownerAddress: randomAccAddress,\n chainId,\n });\n\n if (nonceBefore === null) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Failed to read nonce\",\n };\n }\n\n // Construct permit typed data\n const permitTypedData =\n permitInfo.type === \"dai\"\n ? constructPermitTypedData({\n type: \"dai\",\n permitInfo,\n holder: randomAccAddress,\n spender: spenderAddress,\n nonce: nonceBefore.nonce,\n expiry: deadline,\n allowed: true,\n })\n : constructPermitTypedData({\n type: \"permit1\",\n permitInfo,\n owner: randomAccAddress,\n spender: spenderAddress,\n value: amount,\n nonce: nonceBefore.nonce,\n deadline,\n });\n\n // Only support EIP-2612 and DAI permit types\n if (\n permitTypedData.primaryType !== \"Permit\" ||\n !(\"domain\" in permitTypedData && \"message\" in permitTypedData)\n ) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error:\n \"Unsupported permit type for trySignPermit (only EIP-2612 and DAI supported)\",\n };\n }\n\n // Sign the permit data using the account's signTypedData method\n const signature = await randomAcc.signTypedData({\n domain: permitTypedData.domain,\n types: permitTypedData.types,\n primaryType: permitTypedData.primaryType,\n message: permitTypedData.message,\n });\n\n // Split signature into v, r, s\n const { v, r, s } = parseSignature(signature);\n\n // Ensure v is defined and convert to number for permit calls\n if (v === undefined) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Failed to parse signature - v component is undefined\",\n };\n }\n\n // Convert v to number for permit calls\n const vNumber = Number(v);\n\n // Create permit call data\n let permitCallData: unknown[];\n if (permitInfo.type === \"dai\") {\n permitCallData = createPermitCallData({\n permitType: \"dai\",\n owner: randomAccAddress,\n spender: spenderAddress,\n value: amount,\n nonce: nonceBefore.nonce,\n deadline,\n v: vNumber,\n r,\n s,\n });\n } else {\n permitCallData = createPermitCallData({\n permitType: \"eip2612\",\n owner: randomAccAddress,\n spender: spenderAddress,\n value: amount,\n nonce: nonceBefore.nonce,\n deadline,\n v: vNumber,\n r,\n s,\n });\n }\n\n // Create multicall with: [read nonce, permit(), read nonce]\n const multicallContracts = [\n // 1. Read nonce before permit\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: nonceBefore.nonceMethod,\n args: [randomAccAddress],\n },\n // 2. Call permit function\n {\n chainId,\n address: tokenAddress,\n abi: permitInfo.type === \"dai\" ? DAI_PERMIT_ABI : EIP_2612_PERMIT_ABI,\n functionName: \"permit\",\n args: permitCallData as\n | [Address, Address, bigint, bigint, boolean, number, Hex, Hex]\n | [Address, Address, bigint, bigint, number, Hex, Hex],\n },\n // 3. Read nonce after permit\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: nonceBefore.nonceMethod,\n args: [randomAccAddress],\n },\n ] as const;\n\n // Execute the multicall\n const multicallResult = await readContracts(config, {\n allowFailure: true,\n contracts: multicallContracts,\n });\n\n // Extract results\n const [nonceBeforeResult, permitResult, nonceAfterResult] = multicallResult;\n\n // Check if all results exist\n if (!nonceBeforeResult || !permitResult || !nonceAfterResult) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Multicall returned incomplete results\",\n };\n }\n\n // Check if permit call succeeded\n if (permitResult.status === \"failure\") {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: `Permit call failed: ${permitResult.error?.message || \"Unknown error\"}`,\n };\n }\n\n // Check if we can read nonces\n if (\n nonceBeforeResult.status === \"failure\" ||\n nonceAfterResult.status === \"failure\"\n ) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Failed to read nonces in multicall\",\n };\n }\n\n const nonceBeforeMulticall = nonceBeforeResult.result as bigint;\n const nonceAfterMulticall = nonceAfterResult.result as bigint;\n\n // Verify nonce increased (indicating permit was processed)\n const nonceIncreased = nonceAfterMulticall > nonceBeforeMulticall;\n\n if (!nonceIncreased) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Permit simulation failed - nonce did not increase\",\n };\n }\n\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: true,\n nonceBefore: nonceBeforeMulticall,\n nonceAfter: nonceAfterMulticall,\n nonceMethod: nonceBefore.nonceMethod,\n error: null,\n };\n } catch (error) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error occurred\",\n };\n }\n}\n\ntype ReadNonceParams = {\n config: Config;\n tokenAddress: Address;\n ownerAddress: Address;\n chainId: SupportedChainId;\n};\n\n/**\n * Reads the nonce for a given address and token\n */\nasync function readNonce({\n config,\n tokenAddress,\n ownerAddress,\n chainId,\n}: ReadNonceParams): Promise<{\n nonce: bigint;\n nonceMethod: NonceMethod;\n} | null> {\n const contractCalls = [\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"nonces\",\n args: [ownerAddress],\n },\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"_nonces\",\n args: [ownerAddress],\n },\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"nonce\",\n args: [ownerAddress],\n },\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"getNonce\",\n args: [ownerAddress],\n },\n ] as const;\n\n const results = await readContracts(config, {\n allowFailure: true,\n contracts: contractCalls,\n });\n\n const validNonceIndex = results.findIndex(\n (result) => result.status === \"success\"\n );\n\n if (validNonceIndex === -1) {\n return null;\n }\n\n const nonce = results[validNonceIndex]?.result as bigint;\n const nonceMethod = contractCalls[validNonceIndex]\n ?.functionName as NonceMethod;\n\n return { nonce, nonceMethod };\n}\n\n/**\n * Creates the call data for permit function based on permit type\n */\nfunction createPermitCallData({\n permitType,\n owner,\n spender,\n value,\n nonce,\n deadline,\n v,\n r,\n s,\n}: {\n permitType: \"eip2612\" | \"dai\";\n owner: Address;\n spender: Address;\n value: bigint;\n nonce: bigint;\n deadline: bigint;\n v: number;\n r: Hex;\n s: Hex;\n}): unknown[] {\n if (permitType === \"dai\") {\n // DAI permit: (holder, spender, nonce, expiry, allowed, v, r, s)\n return [owner, spender, nonce, deadline, true, v, r, s];\n } else {\n // EIP2612 permit: (owner, spender, value, deadline, v, r, s)\n return [owner, spender, value, deadline, v, r, s];\n }\n}\n"],"names":["randomAcc","privateKeyToAccount","generatePrivateKey","randomAccAddress","address","RANDOM_SPENDER_ADDRESS","trySignPermit1","config","chainId","permitInfo","tokenAddress","spenderAddress","amount","parseEther","type","success","error","deadline","BigInt","Math","floor","Date","now","nonceBefore","readNonce","ownerAddress","permitTypedData","constructPermitTypedData","holder","spender","nonce","expiry","allowed","owner","value","primaryType","signature","signTypedData","domain","types","message","v","r","s","parseSignature","undefined","vNumber","Number","permitCallData","createPermitCallData","permitType","multicallContracts","abi","ERC_20_NONCES_ABI","functionName","nonceMethod","args","DAI_PERMIT_ABI","EIP_2612_PERMIT_ABI","multicallResult","readContracts","allowFailure","contracts","nonceBeforeResult","permitResult","nonceAfterResult","status","nonceBeforeMulticall","result","nonceAfterMulticall","nonceIncreased","nonceAfter","Error","contractCalls","results","validNonceIndex","findIndex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trySignPermit1.js","sources":["../../../../src/hooks/permit/utils/trySignPermit1.ts"],"sourcesContent":["import { type Config, readContracts } from \"@wagmi/core\";\nimport { type Hex, type Address, parseEther, parseSignature } from \"viem\";\nimport { generatePrivateKey, privateKeyToAccount } from \"viem/accounts\";\nimport {\n type NotDetectedPermitSupport,\n type PermitSupportResult,\n} from \"./detect\";\nimport { constructPermitTypedData } from \"./construct\";\nimport { ERC_20_NONCES_ABI } from \"./constants\";\nimport { DAI_PERMIT_ABI, EIP_2612_PERMIT_ABI } from \"./abi\";\nimport type { NonceMethod } from \"../hooks/usePermit1Nonce\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\n\nexport type TrySignPermitParams = {\n config: Config;\n permitInfo: PermitSupportResult | NotDetectedPermitSupport;\n tokenAddress: Address;\n spenderAddress?: Address;\n amount?: bigint;\n chainId: SupportedChainId;\n};\n\nexport type TrySignPermitSuccess = {\n tokenAddress: Address;\n chainId: SupportedChainId;\n permitInfo: PermitSupportResult;\n success: true;\n error: null;\n nonceBefore: bigint;\n nonceAfter: bigint;\n nonceMethod: NonceMethod;\n};\n\nexport type TrySignPermitFailure = {\n tokenAddress: Address;\n chainId: SupportedChainId;\n permitInfo: PermitSupportResult | NotDetectedPermitSupport;\n success: false;\n error: string;\n};\n\nexport type TrySignPermitResult = TrySignPermitSuccess | TrySignPermitFailure;\n\n// Create a random wallet for testing,\n// wallet starts with nonce=0 everywhere\nconst randomAcc = privateKeyToAccount(generatePrivateKey());\nconst randomAccAddress = randomAcc.address;\n\n// not ZERO_ADDRESS to avoid possible !=address(0) checks\nconst RANDOM_SPENDER_ADDRESS = \"0x0000000000000000000000000000000000000123\";\n\n/**\n * Ultimate check if signing a permit will succeed with detected permitInfo\n * Tests permit functionality by:\n * 1. Creating a random wallet\n * 2. Reading the wallet's nonce\n * 3. Signing permit data with the wallet\n * 4. Making a multicall with: [read nonce, permit(), read nonce]\n * 5. Verifying the nonce increased (indicating permit was processed)\n */\nexport async function trySignPermit1({\n config,\n chainId,\n permitInfo,\n tokenAddress,\n spenderAddress = RANDOM_SPENDER_ADDRESS,\n amount = parseEther(\"1\"),\n}: TrySignPermitParams): Promise<TrySignPermitResult> {\n if (permitInfo.type === \"NOT_DETECTED\") {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Permit not detected\",\n };\n }\n\n try {\n // Create a deadline 1 hour from now\n const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600);\n\n // Read nonce before permit\n const nonceBefore = await readNonce({\n config,\n tokenAddress,\n ownerAddress: randomAccAddress,\n chainId,\n });\n\n if (nonceBefore === null) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Failed to read nonce\",\n };\n }\n\n // Construct permit typed data\n const permitTypedData =\n permitInfo.type === \"dai\"\n ? constructPermitTypedData({\n type: \"dai\",\n permitInfo,\n holder: randomAccAddress,\n spender: spenderAddress,\n nonce: nonceBefore.nonce,\n expiry: deadline,\n allowed: true,\n })\n : constructPermitTypedData({\n type: \"permit1\",\n permitInfo,\n owner: randomAccAddress,\n spender: spenderAddress,\n value: amount,\n nonce: nonceBefore.nonce,\n deadline,\n });\n\n // Only support EIP-2612 and DAI permit types\n if (\n permitTypedData.primaryType !== \"Permit\" ||\n !(\"domain\" in permitTypedData && \"message\" in permitTypedData)\n ) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error:\n \"Unsupported permit type for trySignPermit (only EIP-2612 and DAI supported)\",\n };\n }\n\n // Sign the permit data using the account's signTypedData method\n const signature = await randomAcc.signTypedData({\n domain: permitTypedData.domain,\n types: permitTypedData.types,\n primaryType: permitTypedData.primaryType,\n message: permitTypedData.message,\n });\n\n // Split signature into v, r, s\n const { v, r, s } = parseSignature(signature);\n\n // Ensure v is defined and convert to number for permit calls\n if (v === undefined) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Failed to parse signature - v component is undefined\",\n };\n }\n\n // Convert v to number for permit calls\n const vNumber = Number(v);\n\n // Create permit call data\n let permitCallData: unknown[];\n if (permitInfo.type === \"dai\") {\n permitCallData = createPermitCallData({\n permitType: \"dai\",\n owner: randomAccAddress,\n spender: spenderAddress,\n value: amount,\n nonce: nonceBefore.nonce,\n deadline,\n v: vNumber,\n r,\n s,\n });\n } else {\n permitCallData = createPermitCallData({\n permitType: \"eip2612\",\n owner: randomAccAddress,\n spender: spenderAddress,\n value: amount,\n nonce: nonceBefore.nonce,\n deadline,\n v: vNumber,\n r,\n s,\n });\n }\n\n // Create multicall with: [read nonce, permit(), read nonce]\n const multicallContracts = [\n // 1. Read nonce before permit\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: nonceBefore.nonceMethod,\n args: [randomAccAddress],\n },\n // 2. Call permit function\n {\n chainId,\n address: tokenAddress,\n abi: permitInfo.type === \"dai\" ? DAI_PERMIT_ABI : EIP_2612_PERMIT_ABI,\n functionName: \"permit\",\n args: permitCallData as\n | [Address, Address, bigint, bigint, boolean, number, Hex, Hex]\n | [Address, Address, bigint, bigint, number, Hex, Hex],\n },\n // 3. Read nonce after permit\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: nonceBefore.nonceMethod,\n args: [randomAccAddress],\n },\n ] as const;\n\n // Execute the multicall\n const multicallResult = await readContracts(config, {\n allowFailure: true,\n contracts: multicallContracts,\n });\n\n // Extract results\n const [nonceBeforeResult, permitResult, nonceAfterResult] = multicallResult;\n\n // Check if all results exist\n if (!nonceBeforeResult || !permitResult || !nonceAfterResult) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Multicall returned incomplete results\",\n };\n }\n\n // Check if permit call succeeded\n if (permitResult.status === \"failure\") {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: `Permit call failed: ${permitResult.error?.message || \"Unknown error\"}`,\n };\n }\n\n // Check if we can read nonces\n if (\n nonceBeforeResult.status === \"failure\" ||\n nonceAfterResult.status === \"failure\"\n ) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Failed to read nonces in multicall\",\n };\n }\n\n const nonceBeforeMulticall = nonceBeforeResult.result as bigint;\n const nonceAfterMulticall = nonceAfterResult.result as bigint;\n\n // Verify nonce increased (indicating permit was processed)\n const nonceIncreased = nonceAfterMulticall > nonceBeforeMulticall;\n\n if (!nonceIncreased) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: \"Permit simulation failed - nonce did not increase\",\n };\n }\n\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: true,\n nonceBefore: nonceBeforeMulticall,\n nonceAfter: nonceAfterMulticall,\n nonceMethod: nonceBefore.nonceMethod,\n error: null,\n };\n } catch (error) {\n return {\n tokenAddress,\n chainId,\n permitInfo,\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error occurred\",\n };\n }\n}\n\ntype ReadNonceParams = {\n config: Config;\n tokenAddress: Address;\n ownerAddress: Address;\n chainId: SupportedChainId;\n};\n\n/**\n * Reads the nonce for a given address and token\n */\nasync function readNonce({\n config,\n tokenAddress,\n ownerAddress,\n chainId,\n}: ReadNonceParams): Promise<{\n nonce: bigint;\n nonceMethod: NonceMethod;\n} | null> {\n const contractCalls = [\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"nonces\",\n args: [ownerAddress],\n },\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"_nonces\",\n args: [ownerAddress],\n },\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"nonce\",\n args: [ownerAddress],\n },\n {\n chainId,\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"getNonce\",\n args: [ownerAddress],\n },\n ] as const;\n\n const results = await readContracts(config, {\n allowFailure: true,\n contracts: contractCalls,\n });\n\n const validNonceIndex = results.findIndex(\n (result) => result.status === \"success\"\n );\n\n if (validNonceIndex === -1) {\n return null;\n }\n\n const nonce = results[validNonceIndex]?.result as bigint;\n const nonceMethod = contractCalls[validNonceIndex]\n ?.functionName as NonceMethod;\n\n return { nonce, nonceMethod };\n}\n\n/**\n * Creates the call data for permit function based on permit type\n */\nfunction createPermitCallData({\n permitType,\n owner,\n spender,\n value,\n nonce,\n deadline,\n v,\n r,\n s,\n}: {\n permitType: \"eip2612\" | \"dai\";\n owner: Address;\n spender: Address;\n value: bigint;\n nonce: bigint;\n deadline: bigint;\n v: number;\n r: Hex;\n s: Hex;\n}): unknown[] {\n if (permitType === \"dai\") {\n // DAI permit: (holder, spender, nonce, expiry, allowed, v, r, s)\n return [owner, spender, nonce, deadline, true, v, r, s];\n } else {\n // EIP2612 permit: (owner, spender, value, deadline, v, r, s)\n return [owner, spender, value, deadline, v, r, s];\n }\n}\n"],"names":["randomAcc","privateKeyToAccount","generatePrivateKey","randomAccAddress","address","RANDOM_SPENDER_ADDRESS","trySignPermit1","config","chainId","permitInfo","tokenAddress","spenderAddress","amount","parseEther","type","success","error","deadline","BigInt","Math","floor","Date","now","nonceBefore","readNonce","ownerAddress","permitTypedData","constructPermitTypedData","holder","spender","nonce","expiry","allowed","owner","value","primaryType","signature","signTypedData","domain","types","message","v","r","s","parseSignature","undefined","vNumber","Number","permitCallData","createPermitCallData","permitType","multicallContracts","abi","ERC_20_NONCES_ABI","functionName","nonceMethod","args","DAI_PERMIT_ABI","EIP_2612_PERMIT_ABI","multicallResult","readContracts","allowFailure","contracts","nonceBeforeResult","permitResult","nonceAfterResult","status","nonceBeforeMulticall","result","nonceAfterMulticall","nonceIncreased","nonceAfter","Error","contractCalls","results","validNonceIndex","findIndex"],"mappings":"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"}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || {
|
|
2
|
-
cache: /* @__PURE__ */ new Map(),
|
|
3
|
-
get(name, inst) {
|
|
4
|
-
if (this.cache.has(name)) {
|
|
5
|
-
return this.cache.get(name);
|
|
6
|
-
}
|
|
7
|
-
this.cache.set(name, inst);
|
|
8
|
-
return inst;
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
1
|
function getDomainFromEIP712Domain(eip712Domain) {
|
|
12
2
|
const {
|
|
13
3
|
fields,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../src/hooks/permit/utils/utils.ts"],"sourcesContent":["import type { Address, Hex } from \"viem\";\nimport type { PermitSupportResult } from \"./detect\";\n// Based on https://eips.ethereum.org/EIPS/eip-5267#javascript\n\ntype EIP712DomainTuple = {\n fields: Hex;\n name: string;\n version: string;\n chainId: bigint;\n verifyingContract: Address;\n salt: Hex;\n extensions: readonly bigint[];\n};\n\n/** Retrieves the EIP-712 domain of a contract using EIP-5267 without extensions. */\nexport function getDomainFromEIP712Domain(\n eip712Domain: EIP712DomainTuple\n): PermitSupportResult[\"domain\"] | null {\n const {\n fields,\n name,\n version,\n chainId,\n verifyingContract,\n salt,\n extensions,\n } = eip712Domain;\n\n if (extensions.length > 0) {\n // throw Error(\"Extensions not implemented\");\n return null;\n }\n\n return buildBasicDomain(\n Number(fields),\n name,\n version,\n chainId,\n verifyingContract,\n salt\n );\n}\n\nconst fieldNames = [\n \"name\",\n \"version\",\n \"chainId\",\n \"verifyingContract\",\n \"salt\",\n] as const;\n\n/** Builds a domain object without extensions based on the return values of `eip712Domain()`. */\nfunction buildBasicDomain(\n fields: number,\n name: string,\n version: string,\n chainId: bigint,\n verifyingContract: Address,\n salt: Hex\n): PermitSupportResult[\"domain\"] {\n const domain = {\n name,\n version,\n chainId: Number(chainId),\n verifyingContract,\n salt,\n };\n\n for (const [i, field] of fieldNames.entries()) {\n if (!(fields & (1 << i))) {\n delete domain[field];\n }\n }\n\n return domain;\n}\n"],"names":["getDomainFromEIP712Domain","eip712Domain","fields","name","version","chainId","verifyingContract","salt","extensions","length","buildBasicDomain","Number","fieldNames","domain","i","field","entries"],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../src/hooks/permit/utils/utils.ts"],"sourcesContent":["import type { Address, Hex } from \"viem\";\nimport type { PermitSupportResult } from \"./detect\";\n// Based on https://eips.ethereum.org/EIPS/eip-5267#javascript\n\ntype EIP712DomainTuple = {\n fields: Hex;\n name: string;\n version: string;\n chainId: bigint;\n verifyingContract: Address;\n salt: Hex;\n extensions: readonly bigint[];\n};\n\n/** Retrieves the EIP-712 domain of a contract using EIP-5267 without extensions. */\nexport function getDomainFromEIP712Domain(\n eip712Domain: EIP712DomainTuple\n): PermitSupportResult[\"domain\"] | null {\n const {\n fields,\n name,\n version,\n chainId,\n verifyingContract,\n salt,\n extensions,\n } = eip712Domain;\n\n if (extensions.length > 0) {\n // throw Error(\"Extensions not implemented\");\n return null;\n }\n\n return buildBasicDomain(\n Number(fields),\n name,\n version,\n chainId,\n verifyingContract,\n salt\n );\n}\n\nconst fieldNames = [\n \"name\",\n \"version\",\n \"chainId\",\n \"verifyingContract\",\n \"salt\",\n] as const;\n\n/** Builds a domain object without extensions based on the return values of `eip712Domain()`. */\nfunction buildBasicDomain(\n fields: number,\n name: string,\n version: string,\n chainId: bigint,\n verifyingContract: Address,\n salt: Hex\n): PermitSupportResult[\"domain\"] {\n const domain = {\n name,\n version,\n chainId: Number(chainId),\n verifyingContract,\n salt,\n };\n\n for (const [i, field] of fieldNames.entries()) {\n if (!(fields & (1 << i))) {\n delete domain[field];\n }\n }\n\n return domain;\n}\n"],"names":["getDomainFromEIP712Domain","eip712Domain","fields","name","version","chainId","verifyingContract","salt","extensions","length","buildBasicDomain","Number","fieldNames","domain","i","field","entries"],"mappings":"AAeO,SAASA,0BACdC,YAAAA,EACsC;AACtC,EAAA,MAAM;AAAA,IACJC,MAAAA;AAAAA,IACAC,IAAAA;AAAAA,IACAC,OAAAA;AAAAA,IACAC,OAAAA;AAAAA,IACAC,iBAAAA;AAAAA,IACAC,IAAAA;AAAAA,IACAC;AAAAA,GACF,GAAIP,YAAAA;AAEJ,EAAA,IAAIO,UAAAA,CAAWC,SAAS,CAAA,EAAG;AAEzB,IAAA,OAAO,IAAA;AAAA;AAGT,EAAA,OAAOC,gBAAAA,CACLC,OAAOT,MAAM,CAAA,EACbC,MACAC,OAAAA,EACAC,OAAAA,EACAC,mBACAC,IACF,CAAA;AACF;AAEA,MAAMK,aAAa,CACjB,MAAA,EACA,SAAA,EACA,SAAA,EACA,qBACA,MAAM,CAAA;AAIR,SAASF,iBACPR,MAAAA,EACAC,IAAAA,EACAC,OAAAA,EACAC,OAAAA,EACAC,mBACAC,IAAAA,EAC+B;AAC/B,EAAA,MAAMM,MAAAA,GAAS;AAAA,IACbV,IAAAA;AAAAA,IACAC,OAAAA;AAAAA,IACAC,OAAAA,EAASM,OAAON,OAAO,CAAA;AAAA,IACvBC,iBAAAA;AAAAA,IACAC;AAAAA,GACF;AAEA,EAAA,KAAA,MAAW,CAACO,CAAAA,EAAGC,KAAK,CAAA,IAAKH,UAAAA,CAAWI,SAAQ,EAAG;AAC7C,IAAA,IAAI,EAAEd,MAAAA,GAAU,CAAA,IAAKY,CAAAA,CAAAA,EAAK;AACxB,MAAA,OAAOD,OAAOE,KAAK,CAAA;AAAA;AACrB;AAGF,EAAA,OAAOF,MAAAA;AACT;;;;"}
|