From deb91554bfd28da41cdbc5996b82460aace36c60 Mon Sep 17 00:00:00 2001 From: Evan Gray Date: Fri, 15 Oct 2021 12:07:06 -0400 Subject: [PATCH] bridge_ui: support Luna and UST migration Change-Id: Id29b26ed73105df581a97ddd5d1c2fce95c928a9 --- .../src/components/Transfer/SendPreview.tsx | 2 +- .../hooks/useGetSourceParsedTokenAccounts.ts | 11 +++++ bridge_ui/src/hooks/useMetadata.ts | 2 +- bridge_ui/src/hooks/useTerraTokenMap.ts | 13 ++--- bridge_ui/src/utils/consts.ts | 47 +++++++++++++++---- lp_ui/src/contexts/SolanaWalletContext.tsx | 7 ++- 6 files changed, 62 insertions(+), 20 deletions(-) diff --git a/bridge_ui/src/components/Transfer/SendPreview.tsx b/bridge_ui/src/components/Transfer/SendPreview.tsx index d0fe5fff..d4b7fe23 100644 --- a/bridge_ui/src/components/Transfer/SendPreview.tsx +++ b/bridge_ui/src/components/Transfer/SendPreview.tsx @@ -24,7 +24,7 @@ export default function SendPreview() { const sourceChain = useSelector(selectTransferSourceChain); const transferTx = useSelector(selectTransferTransferTx); - const explainerString = "The tokens have been sent!"; + const explainerString = "The tokens have entered the bridge!"; return ( <> diff --git a/bridge_ui/src/hooks/useGetSourceParsedTokenAccounts.ts b/bridge_ui/src/hooks/useGetSourceParsedTokenAccounts.ts index 1df5eb0b..0f2da4f7 100644 --- a/bridge_ui/src/hooks/useGetSourceParsedTokenAccounts.ts +++ b/bridge_ui/src/hooks/useGetSourceParsedTokenAccounts.ts @@ -349,6 +349,17 @@ const getSolanaParsedTokenAccounts = async ( ); }); + // uncomment to test token account in picker, useful for debugging + // splParsedTokenAccounts.push({ + // amount: "1", + // decimals: 8, + // mintKey: "2Xf2yAXJfg82sWwdLUo2x9mZXy6JCdszdMZkcF1Hf4KV", + // publicKey: "2Xf2yAXJfg82sWwdLUo2x9mZXy6JCdszdMZkcF1Hf4KV", + // uiAmount: 1, + // uiAmountString: "1", + // isNativeAsset: false, + // }); + if (nft) { //In the case of NFTs, we are done, and we set the accounts in redux dispatch(receiveSourceParsedTokenAccountsNFT(splParsedTokenAccounts)); diff --git a/bridge_ui/src/hooks/useMetadata.ts b/bridge_ui/src/hooks/useMetadata.ts index c144064a..73deea7e 100644 --- a/bridge_ui/src/hooks/useMetadata.ts +++ b/bridge_ui/src/hooks/useMetadata.ts @@ -109,7 +109,7 @@ export default function useMetadata( chainId: ChainId, addresses: string[] ): DataWrapper> { - const terraTokenMap = useTerraTokenMap(); + const terraTokenMap = useTerraTokenMap(chainId === CHAIN_ID_TERRA); const solanaTokenMap = useSolanaTokenMap(); const solanaAddresses = useMemo(() => { diff --git a/bridge_ui/src/hooks/useTerraTokenMap.ts b/bridge_ui/src/hooks/useTerraTokenMap.ts index 61233028..01e4d0ba 100644 --- a/bridge_ui/src/hooks/useTerraTokenMap.ts +++ b/bridge_ui/src/hooks/useTerraTokenMap.ts @@ -25,18 +25,19 @@ export type TerraTokenMap = { }; }; -const useTerraTokenMap = (): DataWrapper => { +const useTerraTokenMap = (shouldFire: boolean): DataWrapper => { const terraTokenMap = useSelector(selectTerraTokenMap); const dispatch = useDispatch(); - const shouldFire = - terraTokenMap.data === undefined || - (terraTokenMap.data === null && !terraTokenMap.isFetching); + const internalShouldFire = + shouldFire && + (terraTokenMap.data === undefined || + (terraTokenMap.data === null && !terraTokenMap.isFetching)); useEffect(() => { - if (shouldFire) { + if (internalShouldFire) { getTerraTokenMap(dispatch); } - }, [shouldFire, dispatch]); + }, [internalShouldFire, dispatch]); return terraTokenMap; }; diff --git a/bridge_ui/src/utils/consts.ts b/bridge_ui/src/utils/consts.ts index 521f8195..d832be7d 100644 --- a/bridge_ui/src/utils/consts.ts +++ b/bridge_ui/src/utils/consts.ts @@ -5,7 +5,6 @@ import { CHAIN_ID_SOLANA, CHAIN_ID_TERRA, } from "@certusone/wormhole-sdk"; -import { ChainID } from "@certusone/wormhole-sdk/lib/proto/publicrpc/v1/publicrpc"; import { clusterApiUrl } from "@solana/web3.js"; import { getAddress } from "ethers/lib/utils"; @@ -391,15 +390,25 @@ export const MIGRATION_ASSET_MAP = new Map( "2kycGCD8tJbrjJJqWN2Qz5ysN9iB4Bth3Uic4mSB7uak", "43m2ewFV5nDepieFjT9EmAQnc1HRtAF247RBpLGFem5F", ], + // [ + // // UST + // "CXLBjMMcwkc17GfJtBos6rQCo1ypeH6eDbB82Kby4MRm", + // "5Un6AdG9GBjxVhTSvvt2x6X6vtN1zrDxkkDpDcShnHfF", + // ], [ // UST "CXLBjMMcwkc17GfJtBos6rQCo1ypeH6eDbB82Kby4MRm", - "5Un6AdG9GBjxVhTSvvt2x6X6vtN1zrDxkkDpDcShnHfF", + "9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i", ], + // [ + // // Wrapped LUNA + // "2Xf2yAXJfg82sWwdLUo2x9mZXy6JCdszdMZkcF1Hf4KV", + // "EQTV1LW23Mgtjb5LXSg9NGw1J32oqTV4HCPmHCVSGmqD", + // ], [ // Wrapped LUNA "2Xf2yAXJfg82sWwdLUo2x9mZXy6JCdszdMZkcF1Hf4KV", - "EQTV1LW23Mgtjb5LXSg9NGw1J32oqTV4HCPmHCVSGmqD", + "F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W", ], [ // FTT @@ -454,7 +463,18 @@ export const MIGRATION_ASSET_MAP = new Map( export const ETH_MIGRATION_ASSET_MAP = new Map( CLUSTER === "mainnet" - ? [] + ? [ + [ + // LUNA + "0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9", + "0xe76820F1DB773B1d62a3D22F47259705cC5fA4E6", + ], + [ + // UST + "0xa47c8bf37f92aBed4A126BDA807A7b7498661acD", + "0xF39C29d8f6851d87c40c83b61078EB7384f7Cb51", + ], + ] : CLUSTER === "testnet" ? [] : [ @@ -467,22 +487,29 @@ export const ETH_MIGRATION_ASSET_MAP = new Map( export const BSC_MIGRATION_ASSET_MAP = new Map( CLUSTER === "mainnet" - ? [] + ? [ + [ + // LUNA + "0xECCF35F941Ab67FfcAA9A1265C2fF88865caA005", + "0x355A116ef1Cf566B12Ef3a8e409A64e303c53740", + ], + [ + // UST + "0x23396cF899Ca06c4472205fC903bDB4de249D6fC", + "0x0F98AB919D04a291838B3b075c57181057D4CF75", + ], + ] : CLUSTER === "testnet" ? [] : [ // [ // "0x2D8BE6BF0baA74e0A907016679CaE9190e80dD0A", - // "0x4bf3A7dFB3b76b5B3E169ACE65f888A4b4FCa5Ee", - // ], - // [ - // "0x68d1569d1a6968f194b4d93f8d0b416c123a599f", // "0xFcCeD5E997E7fb1D0594518D3eD57245bB8ed17E", // ], ] ); -export const getMigrationAssetMap = (chainId: ChainID) => { +export const getMigrationAssetMap = (chainId: ChainId) => { if (chainId === CHAIN_ID_BSC) { return BSC_MIGRATION_ASSET_MAP; } else if (chainId === CHAIN_ID_ETH) { diff --git a/lp_ui/src/contexts/SolanaWalletContext.tsx b/lp_ui/src/contexts/SolanaWalletContext.tsx index c3468804..63e08b41 100644 --- a/lp_ui/src/contexts/SolanaWalletContext.tsx +++ b/lp_ui/src/contexts/SolanaWalletContext.tsx @@ -1,13 +1,16 @@ import { WalletDialogProvider } from "@solana/wallet-adapter-material-ui"; import { useWallet, WalletProvider } from "@solana/wallet-adapter-react"; -import { getPhantomWallet } from "@solana/wallet-adapter-wallets"; +import { + getPhantomWallet, + getSolletWallet, +} from "@solana/wallet-adapter-wallets"; import React, { FC, useMemo } from "react"; export const SolanaWalletProvider: FC = (props) => { // @solana/wallet-adapter-wallets includes all the adapters but supports tree shaking -- // Only the wallets you want to instantiate here will be compiled into your application const wallets = useMemo(() => { - return [getPhantomWallet()]; + return [getPhantomWallet(), getSolletWallet()]; }, []); return (