Skip to content

Commit

Permalink
feat: universal-stash (#9213)
Browse files Browse the repository at this point in the history
<!-- start pr-codex -->

## PR-Codex overview
This PR updates various packages and configurations related to
PancakeSwap, including adding new ABIs, SDKs, and improving the
universal router setup.

### Detailed summary
- Added `v3PoolAbi` ABI
- Updated SDK versions
- Added new entities and protocols
- Improved universal router setup
- Enhanced error handling in `UserUnexpectedTxError` class

> The following files were skipped due to too many changes:
`packages/smart-router/evm/v3-router/utils/index.ts`,
`apps/web/src/views/Swap/V3Swap/hooks/index.ts`, `package.json`,
`packages/universal-router-sdk/test/utils/permit.ts`,
`packages/smart-router/evm/index.test.ts`,
`apps/web/src/hooks/usePermit2Allowance.ts`,
`packages/universal-router-sdk/src/entities/types.ts`,
`packages/position-managers/package.json`,
`packages/universal-router-sdk/README.md`,
`packages/widgets-internal/swap/SwapTransactionReceiptModalContentV1.tsx`,
`packages/permit2-sdk/tsconfig.json`,
`packages/universal-router-sdk/tsconfig.json`,
`apps/web/src/hooks/useGetENSAddressByName.ts`,
`packages/wagmi/package.json`, `apps/web/package.json`,
`apps/web/src/hooks/useTokenAllowance.ts`,
`apps/web/src/views/Swap/V3Swap/hooks/useSwapCurrency.ts`,
`packages/v3-sdk/src/abi/V3PoolAbi.ts`,
`packages/permit2-sdk/src/utils/utils.ts`,
`apps/web/src/views/Swap/V3Swap/containers/SwapCommitButton.tsx`,
`apps/web/src/views/Swap/V3Swap/hooks/useSwapCallback.ts`,
`apps/web/src/views/Swap/V3Swap/hooks/useSwapCallArguments.ts`,
`apps/web/src/hooks/useCallWithGasPrice.ts`,
`apps/web/src/views/Swap/V3Swap/types.ts`,
`apps/web/src/views/Swap/V3Swap/hooks/useSwapBestTrade.ts`,
`apps/web/src/state/transactions/reducer.ts`,
`apps/web/src/views/Swap/V3Swap/containers/MMCommitButton.tsx`,
`apps/web/src/hooks/useApproveCallback.ts`,
`packages/permit2-sdk/package.json`,
`apps/web/src/hooks/usePublicNodeWaitForTransaction.ts`,
`packages/widgets-internal/swap/index.ts`,
`packages/widgets-internal/swap/TransactionErrorContent.tsx`,
`packages/widgets-internal/swap/ApproveModalContentV1.tsx`,
`packages/widgets-internal/swap/SwapPendingModalContentV1.tsx`,
`packages/universal-router-sdk/test/fixtures/clients.ts`,
`packages/widgets-internal/swap/SwapTransactionReceiptModalContent.tsx`,
`packages/universal-router-sdk/test/utils/calldataDecode.ts`,
`packages/universal-router-sdk/src/entities/protocols/unwrapWETH.ts`,
`packages/universal-router-sdk/package.json`,
`apps/web/src/hooks/useWritePermit.ts`,
`apps/web/src/views/Swap/V3Swap/hooks/useWallchain.ts`,
`apps/web/src/utils/wagmi.ts`,
`apps/web/src/hooks/usePermit2Details.ts`,
`apps/web/src/views/Swap/V3Swap/components/TransactionConfirmSwapContent.tsx`,
`apps/web/src/hooks/usePermit2Requires.ts`,
`apps/web/src/views/Swap/components/SwapModalHeader.tsx`,
`packages/universal-router-sdk/test/fixtures/constants/tokens.ts`,
`apps/web/src/views/Swap/V3Swap/containers/MMCommitButtonV2.tsx`,
`packages/universal-router-sdk/src/constants.ts`,
`apps/web/src/config/wallet.ts`,
`packages/widgets-internal/swap/styles.tsx`,
`apps/web/src/views/Swap/MMLinkPools/components/MMCommitButton.tsx`,
`apps/web/src/views/Swap/V3Swap/hooks/useSendSwapTransaction.ts`,
`packages/widgets-internal/swap/SwapPendingModalContent.tsx`,
`apps/web/src/views/Swap/V3Swap/containers/ApproveStepFlow.tsx`,
`apps/web/src/views/Swap/V3Swap/hooks/useSwapCallArgumentsV2.ts`,
`packages/universal-router-sdk/test/fixtures/constants/chains.ts`,
`packages/universal-router-sdk/src/abis/ERC20.ts`,
`apps/web/src/views/Swap/V3Swap/components/SwapModalFooter.tsx`,
`packages/universal-router-sdk/src/swapRouter.ts`,
`packages/permit2-sdk/src/constants.ts`,
`packages/permit2-sdk/src/allowanceTransfer.ts`,
`apps/web/src/views/Swap/MMLinkPools/hooks/useApprove.ts`,
`apps/web/src/hooks/usePermit2.ts`,
`apps/web/src/state/transactions/hooks.tsx`,
`apps/web/src/views/Swap/V3Swap/index.tsx`,
`packages/localization/src/config/translations.json`,
`packages/universal-router-sdk/src/utils/inputTokens.ts`,
`packages/widgets-internal/swap/useUnmountingAnimation.ts`,
`apps/web/src/views/Swap/V3Swap/containers/ApproveStepFlowV2.tsx`,
`packages/universal-router-sdk/src/abis/NFT20.ts`,
`apps/web/src/views/Swap/V3Swap/hooks/useSwapCallbackV2.ts`,
`packages/permit2-sdk/src/signatureTransfer.ts`,
`packages/widgets-internal/swap/ApproveModalContent.tsx`,
`packages/universal-router-sdk/test/utils/buildTrade.ts`,
`apps/web/src/views/Swap/MMLinkPools/hooks/useSwapCallArguments.ts`,
`apps/web/src/views/Swap/V3Swap/containers/ConfirmSwapModal.tsx`,
`packages/universal-router-sdk/test/fixtures/address.ts`,
`apps/web/src/views/Swap/MMLinkPools/components/MMCommitButtonV2.tsx`,
`packages/widgets-internal/swap/Logos.tsx`,
`apps/web/src/views/Swap/MMLinkPools/hooks/useSwapCallback.ts`,
`apps/web/src/views/Swap/MMLinkPools/hooks/useMMConfirmModalState.ts`,
`apps/web/src/views/Swap/V3Swap/hooks/useConfirmModalState.tsx`,
`packages/universal-router-sdk/src/abis/NFTXZap.ts`,
`apps/web/src/views/Swap/V3Swap/containers/ConfirmSwapModalV2.tsx`,
`packages/universal-router-sdk/src/abis/UniversalRouter.ts`,
`packages/universal-router-sdk/src/utils/routerCommands.ts`,
`apps/web/src/views/Swap/V3Swap/containers/SwapCommitButtonV2.tsx`,
`apps/web/src/views/Swap/V3Swap/hooks/useConfirmModalStateV2.ts`,
`packages/permit2-sdk/src/abis/Permit2.ts`,
`packages/universal-router-sdk/src/abis/IUniswapV3Pool.ts`,
`packages/universal-router-sdk/src/entities/protocols/pancakeswap.ts`,
`packages/universal-router-sdk/src/abis/X2Y2.ts`,
`packages/universal-router-sdk/src/abis/Sudoswap.ts`,
`packages/universal-router-sdk/src/abis/Foundation.ts`,
`packages/universal-router-sdk/src/abis/LooksRareV2.ts`,
`packages/universal-router-sdk/src/abis/Element.ts`,
`packages/universal-router-sdk/src/abis/Seaport.ts`, `pnpm-lock.yaml`,
`packages/universal-router-sdk/test/__snapshots__/trade.test.ts.snap`,
`packages/universal-router-sdk/test/trade.test.ts`

> ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your
question}`

<!-- end pr-codex -->

---------

Co-authored-by: chefjackson <[email protected]>
Co-authored-by: ChefJoJo <[email protected]>
  • Loading branch information
3 people authored Mar 7, 2024
1 parent 28ede7e commit acc454d
Show file tree
Hide file tree
Showing 142 changed files with 26,164 additions and 785 deletions.
10 changes: 10 additions & 0 deletions .changeset/lazy-files-cry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@pancakeswap/wagmi': major
'@pancakeswap/universal-router-sdk': patch
'@pancakeswap/smart-router': patch
'@pancakeswap/permit2-sdk': patch
'@pancakeswap/v3-sdk': patch
---

Remove binance extension wallet connector @pancakeswap/wagmi
release new pkg @pancakeswap/universal-router-sdk & @pancakeswap/permit2-sdk
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
debug.log*
**/vite.config.ts.timestamp*.mjs

**/apps/web/config/abi/types
**/packages/smart-router/evm/abis/types
Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
},
"editor.formatOnSave": true,
"cSpell.words": [
"bips",
"Aptos",
"ARBITRUM",
"awgmi",
Expand Down
2 changes: 2 additions & 0 deletions apps/web/next.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ const config = {
'@pancakeswap/hooks',
'@pancakeswap/utils',
'@pancakeswap/widgets-internal',
'@pancakeswap/universal-router-sdk',
'@pancakeswap/permit2-sdk',
'@pancakeswap/ifos',
],
reactStrictMode: true,
Expand Down
4 changes: 3 additions & 1 deletion apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
"@pancakeswap/ifos": "workspace:*",
"@pancakeswap/localization": "workspace:*",
"@pancakeswap/multicall": "workspace:*",
"@pancakeswap/permit2-sdk": "workspace:*",
"@pancakeswap/pools": "workspace:*",
"@pancakeswap/position-managers": "workspace:*",
"@pancakeswap/prediction": "workspace:*",
Expand All @@ -62,6 +63,7 @@
"@pancakeswap/tokens": "workspace:*",
"@pancakeswap/ui-wallets": "workspace:*",
"@pancakeswap/uikit": "workspace:*",
"@pancakeswap/universal-router-sdk": "workspace:*",
"@pancakeswap/utils": "workspace:*",
"@pancakeswap/v3-sdk": "workspace:*",
"@pancakeswap/wagmi": "workspace:*",
Expand Down Expand Up @@ -124,7 +126,7 @@
"tiny-invariant": "^1.3.0",
"uuid": "^8.0.0",
"viem": "1.19.11",
"wagmi": "1.4.7",
"wagmi": "1.4.13",
"zod": "^3.22.3"
},
"devDependencies": {
Expand Down
130 changes: 0 additions & 130 deletions apps/web/src/config/abi/pancakeSwapSmartRouter.json

This file was deleted.

6 changes: 6 additions & 0 deletions apps/web/src/config/experimentalFeatures.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export enum EXPERIMENTAL_FEATURES {
WebNotifications = 'web-notifications',
SpeedQuote = 'routing-speed-quote',
UniversalRouter = 'universal-router',
}
export type EnumValues<T> = T extends { [key: string]: infer U } ? U : never

Expand Down Expand Up @@ -28,4 +29,9 @@ export const EXPERIMENTAL_FEATURE_CONFIGS: ExperimentalFeatureConfigs = [
percentage: 0.1,
whitelist: [],
},
{
feature: EXPERIMENTAL_FEATURES.UniversalRouter,
percentage: 0,
whitelist: [],
},
]
51 changes: 25 additions & 26 deletions apps/web/src/config/wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { WalletConfigV2 } from '@pancakeswap/ui-wallets'
import { WalletFilledIcon } from '@pancakeswap/uikit'
import { getTrustWalletProvider } from '@pancakeswap/wagmi/connectors/trustWallet'
import type { ExtendEthereum } from 'global'
import { isFirefox } from 'react-device-detect'
import { walletConnectNoQrCodeConnector } from '../utils/wagmi'
import { ASSET_CDN } from './constants/endpoints'

Expand All @@ -12,11 +11,11 @@ export enum ConnectorNames {
Injected = 'injected',
WalletConnect = 'walletConnect',
WalletConnectV1 = 'walletConnectLegacy',
BSC = 'bsc',
// BSC = 'bsc',
BinanceW3W = 'BinanceW3W',
Blocto = 'blocto',
WalletLink = 'coinbaseWallet',
Ledger = 'ledger',
// Ledger = 'ledger',
TrustWallet = 'trustWallet',
CyberWallet = 'cyberwallet',
}
Expand Down Expand Up @@ -87,23 +86,23 @@ const walletsConfig = ({
return undefined
},
},
{
id: 'binance',
title: 'Binance Wallet',
icon: `${ASSET_CDN}/web/wallets/binance.png`,
get installed() {
return typeof window !== 'undefined' && Boolean(window.BinanceChain)
},
connectorId: ConnectorNames.BSC,
guide: {
desktop: 'https://www.bnbchain.org/en/binance-wallet',
},
downloadLink: {
desktop: isFirefox
? 'https://addons.mozilla.org/en-US/firefox/addon/binance-chain/?src=search'
: 'https://chrome.google.com/webstore/detail/binance-wallet/fhbohimaelbohpjbbldcngcnapndodjp',
},
},
// {
// id: 'binance',
// title: 'Binance Wallet',
// icon: `${ASSET_CDN}/web/wallets/binance.png`,
// get installed() {
// return typeof window !== 'undefined' && Boolean(window.BinanceChain)
// },
// connectorId: ConnectorNames.BSC,
// guide: {
// desktop: 'https://www.bnbchain.org/en/binance-wallet',
// },
// downloadLink: {
// desktop: isFirefox
// ? 'https://addons.mozilla.org/en-US/firefox/addon/binance-chain/?src=search'
// : 'https://chrome.google.com/webstore/detail/binance-wallet/fhbohimaelbohpjbbldcngcnapndodjp',
// },
// },
{
id: 'coinbase',
title: 'Coinbase Wallet',
Expand Down Expand Up @@ -236,12 +235,12 @@ const walletsConfig = ({
desktop: 'https://docs.cyber.co/sdk/cyber-account#supported-chains',
},
},
{
id: 'ledger',
title: 'Ledger',
icon: `${ASSET_CDN}/web/wallets/ledger.png`,
connectorId: ConnectorNames.Ledger,
},
// {
// id: 'ledger',
// title: 'Ledger',
// icon: `${ASSET_CDN}/web/wallets/ledger.png`,
// connectorId: ConnectorNames.Ledger,
// },
]
}

Expand Down
19 changes: 6 additions & 13 deletions apps/web/src/hooks/useApproveCallback.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,18 +143,11 @@ export function useApproveCallback(
})

if (!estimatedGas) return undefined

return callWithGasPrice(
tokenContract,
'approve' as const,
[
spender as Address,
overrideAmountApprove ?? (useExact ? amountToApprove?.quotient ?? targetAmount ?? MaxUint256 : MaxUint256),
],
{
gas: calculateGasMargin(estimatedGas),
},
)
const finalAmount =
overrideAmountApprove ?? (useExact ? amountToApprove?.quotient ?? targetAmount ?? MaxUint256 : MaxUint256)
return callWithGasPrice(tokenContract, 'approve' as const, [spender as Address, finalAmount], {
gas: calculateGasMargin(estimatedGas),
})
.then((response) => {
if (addToTransaction && token) {
addTransaction(response, {
Expand All @@ -163,7 +156,7 @@ export function useApproveCallback(
text: 'Approve %symbol%',
data: { symbol: overrideAmountApprove?.toString() ?? amountToApprove?.currency?.symbol },
},
approval: { tokenAddress: token.address, spender },
approval: { tokenAddress: token.address, spender, amount: finalAmount.toString() },
type: 'approve',
})
}
Expand Down
5 changes: 3 additions & 2 deletions apps/web/src/hooks/useCallWithGasPrice.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { useCallback } from 'react'
import { useGasPrice } from 'state/user/hooks'
import { calculateGasMargin } from 'utils'
import { publicClient } from 'utils/wagmi'
import type { EstimateContractGasParameters } from 'viem'
import {
Abi,
Account,
Expand All @@ -11,10 +13,8 @@ import {
InferFunctionName,
WriteContractParameters,
} from 'viem'
import type { EstimateContractGasParameters } from 'viem'
import { useWalletClient } from 'wagmi'
import { SendTransactionResult } from 'wagmi/actions'
import { calculateGasMargin } from 'utils'
import { useActiveChainId } from './useActiveChainId'

export function useCallWithGasPrice() {
Expand Down Expand Up @@ -100,6 +100,7 @@ export function useCallWithGasPrice() {
functionName: methodName,
args: methodArgs,
gasPrice,
// for some reason gas price is insamely high when using maxuint approval, so commenting out for now
gas: calculateGasMargin(gas),
value: 0n,
...overrides_,
Expand Down
3 changes: 2 additions & 1 deletion apps/web/src/hooks/useGetENSAddressByName.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-

const ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/

export const useGetENSAddressByName = (ensNameOrAddress: string) => {
export const useGetENSAddressByName = (ensNameOrAddress?: string) => {
const { chainId } = useActiveChainId()
const ensSupported = useMemo(
() => Boolean(chainId && ENS_SUPPORT_CHAIN_IDS.includes(chainId as (typeof ENS_SUPPORT_CHAIN_IDS)[number])),
Expand All @@ -22,6 +22,7 @@ export const useGetENSAddressByName = (ensNameOrAddress: string) => {
name: ensNameOrAddress,
chainId,
enabled:
typeof ensNameOrAddress !== 'undefined' &&
(ENS_NAME_REGEX.test(ensNameOrAddress) || ADDRESS_REGEX.test(ensNameOrAddress)) &&
chainId !== ChainId.BSC &&
chainId !== ChainId.BSC_TESTNET &&
Expand Down
Loading

0 comments on commit acc454d

Please sign in to comment.